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
00014 class ibis::direkte : public ibis::index {
00015 public:
00016 virtual INDEX_TYPE type() const {return DIREKTE;}
00017 virtual const char* name() const {return "direct";}
00018
00019 using ibis::index::evaluate;
00020 using ibis::index::estimate;
00021 virtual long evaluate(const ibis::qContinuousRange& expr,
00022 ibis::bitvector& hits) const;
00023 virtual void estimate(const ibis::qContinuousRange& expr,
00024 ibis::bitvector& lower,
00025 ibis::bitvector& upper) const;
00026 virtual uint32_t estimate(const ibis::qContinuousRange& expr) const;
00027 virtual float undecidable(const ibis::qContinuousRange& expr,
00028 ibis::bitvector& iffy) const {
00029 iffy.clear();
00030 return 0.0;
00031 }
00032
00033 virtual long evaluate(const ibis::qDiscreteRange& expr,
00034 ibis::bitvector& hits) const;
00035 virtual void estimate(const ibis::qDiscreteRange& expr,
00036 ibis::bitvector& lower,
00037 ibis::bitvector& upper) const;
00038 virtual uint32_t estimate(const ibis::qDiscreteRange& expr) const;
00039 virtual float undecidable(const ibis::qDiscreteRange& expr,
00040 ibis::bitvector& iffy) const {
00041 iffy.clear();
00042 return 0.0;
00043 }
00044
00045 virtual double estimateCost(const ibis::qContinuousRange& expr) const;
00046 virtual double estimateCost(const ibis::qDiscreteRange& expr) const;
00047
00048 virtual void print(std::ostream& out) const;
00049 virtual int write(const char* name) const;
00050 virtual int read(const char* name);
00051 virtual int read(ibis::fileManager::storage* st);
00052
00054 virtual long append(const char* dt, const char* df, uint32_t nnew);
00055
00057 virtual void speedTest(std::ostream& out) const {};
00058
00059 virtual void binBoundaries(std::vector<double>&) const;
00060 virtual void binWeights(std::vector<uint32_t>&) const;
00061
00062 virtual double getMin() const {return 0.0;}
00063 virtual double getMax() const {return(bits.size()-1.0);}
00064 virtual double getSum() const;
00065 virtual long getCumulativeDistribution
00066 (std::vector<double>& bds, std::vector<uint32_t>& cts) const;
00067 virtual long getDistribution
00068 (std::vector<double>& bbs, std::vector<uint32_t>& cts) const;
00069
00070 virtual ~direkte() {clear();}
00071 direkte(const ibis::column* c, const char* f = 0);
00072 direkte(const ibis::column* c, ibis::fileManager::storage* st);
00073
00074 protected:
00075 template <typename T>
00076 int construct(const char* f);
00077
00078 void locate(const ibis::qContinuousRange& expr,
00079 uint32_t& hit0, uint32_t& hit1) const;
00080 virtual size_t getSerialSize() const throw();
00081
00082 direkte();
00083 direkte(const direkte&);
00084 direkte& operator=(const direkte&);
00085 };
00086
00087 #endif