idirekte.h
Go to the documentation of this file.
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

Make It A Bit Faster
Contact us
Disclaimers
FastBit source code
FastBit mailing list archive