00001 //File: $Id$ 00002 // Author: John Wu <John.Wu at ACM.org> 00003 // Copyright 2006-2011 the Regents of the University of California 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 }; // ibis::direkte 00086 00087 #endif
![]() |