Go to the documentation of this file.00001
00002
00003
00004 #ifndef IBIS_DIREKTE_H
00005 #define IBIS_DIREKTE_H
00006
00007
00008
00009
00010 #include "index.h"
00011
00017 class ibis::direkte : public ibis::index {
00018 public:
00019 virtual INDEX_TYPE type() const {return DIREKTE;}
00020 virtual const char* name() const {return "direct";}
00021
00022 using ibis::index::evaluate;
00023 using ibis::index::estimate;
00024 virtual long evaluate(const ibis::qContinuousRange& expr,
00025 ibis::bitvector& hits) const;
00026 virtual void estimate(const ibis::qContinuousRange& expr,
00027 ibis::bitvector& lower,
00028 ibis::bitvector& upper) const;
00029 virtual uint32_t estimate(const ibis::qContinuousRange& expr) const;
00030 virtual float undecidable(const ibis::qContinuousRange& expr,
00031 ibis::bitvector& iffy) const {
00032 iffy.clear();
00033 return 0.0;
00034 }
00035
00036 virtual long evaluate(const ibis::qDiscreteRange& expr,
00037 ibis::bitvector& hits) const;
00038 virtual void estimate(const ibis::qDiscreteRange& expr,
00039 ibis::bitvector& lower,
00040 ibis::bitvector& upper) const;
00041 virtual uint32_t estimate(const ibis::qDiscreteRange& expr) const;
00042 virtual float undecidable(const ibis::qDiscreteRange& expr,
00043 ibis::bitvector& iffy) const {
00044 iffy.clear();
00045 return 0.0;
00046 }
00047
00048 virtual double estimateCost(const ibis::qContinuousRange& expr) const;
00049 virtual double estimateCost(const ibis::qDiscreteRange& expr) const;
00050
00051 virtual long select(const ibis::qContinuousRange&, void*) const {
00052 return -1;}
00053 virtual long select(const ibis::qContinuousRange&, void*,
00054 ibis::bitvector&) const {
00055 return -1;}
00056
00057 virtual void print(std::ostream& out) const;
00058 virtual int write(const char* name) const;
00059 virtual int read(const char* name);
00060 virtual int read(ibis::fileManager::storage* st);
00061
00062 virtual long append(const char* dt, const char* df, uint32_t nnew);
00063
00064 long append(const ibis::direkte& tail);
00065 long append(const array_t<uint32_t>& ind);
00066 array_t<uint32_t>* keys(const ibis::bitvector& mask) const;
00067 int remapKeys(const ibis::array_t<uint32_t>&);
00068
00071 virtual void speedTest(std::ostream& out) const {};
00072
00073 virtual void binBoundaries(std::vector<double>&) const;
00074 virtual void binWeights(std::vector<uint32_t>&) const;
00075
00076 virtual double getMin() const {return 0.0;}
00077 virtual double getMax() const {return(bits.size()-1.0);}
00078 virtual double getSum() const;
00079 virtual long getCumulativeDistribution
00080 (std::vector<double>& bds, std::vector<uint32_t>& cts) const;
00081 virtual long getDistribution
00082 (std::vector<double>& bbs, std::vector<uint32_t>& cts) const;
00083
00084 virtual ~direkte() {clear();}
00085 direkte(const ibis::column* c, const char* f = 0);
00086 direkte(const ibis::column* c, ibis::fileManager::storage* st);
00087 direkte(const ibis::column* c, uint32_t popu, uint32_t ntpl=0);
00088 direkte(const ibis::column* c, uint32_t card, array_t<uint32_t>& ints);
00089
00090 protected:
00091 template <typename T>
00092 int construct(const char* f);
00093 template <typename T>
00094 int construct0(const char* f);
00095
00096 void locate(const ibis::qContinuousRange& expr,
00097 uint32_t& hit0, uint32_t& hit1) const;
00098 virtual size_t getSerialSize() const throw();
00099
00100 direkte();
00101 direkte(const direkte&);
00102 direkte& operator=(const direkte&);
00103 };
00104
00105 #endif