00001 //File: $Id$ 00002 // Author: John Wu <John.Wu at ACM.org> 00003 // Copyright 2006-2012 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 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 }; // ibis::direkte 00104 00105 #endif
![]() |