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