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

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