Go to the documentation of this file.00001
00002
00003
00004 #ifndef IBIS_FILTER_H
00005 #define IBIS_FILTER_H
00006
00014 #include "quaere.h"
00015 #include "whereClause.h"
00016 #include "selectClause.h"
00017
00018 namespace ibis {
00019 class filter;
00020 }
00021
00025 class ibis::filter : public ibis::quaere {
00026 public:
00028 explicit filter(const ibis::whereClause* w);
00030 filter(const ibis::selectClause* s, const ibis::constPartList* p,
00031 const ibis::whereClause* w);
00033 virtual ~filter();
00034
00035 virtual void roughCount(uint64_t& nmin, uint64_t& nmax) const;
00036 virtual int64_t count() const;
00037 virtual table* select() const;
00038 virtual table* select(const char*) const;
00039 virtual table* select(const ibis::table::stringList& colnames) const;
00040
00041 static table* sift(const ibis::selectClause &sel,
00042 const ibis::constPartList &pl,
00043 const ibis::whereClause &wc);
00044 static table* sift0(const ibis::selectClause &,
00045 const ibis::constPartList &);
00046 static table* sift0S(const ibis::selectClause &,
00047 const ibis::constPartList &);
00048 static table* sift1(const ibis::selectClause &,
00049 const ibis::constPartList &,
00050 const ibis::whereClause &);
00051 static table* sift1S(const ibis::selectClause &,
00052 const ibis::constPartList &,
00053 const ibis::whereClause &);
00054 static table* sift2(const ibis::selectClause &,
00055 const ibis::constPartList &,
00056 const ibis::whereClause &);
00057 static table* sift2(const ibis::selectClause &,
00058 const ibis::constPartList &,
00059 const ibis::array_t<ibis::bitvector*> &);
00060 static table* sift2(const ibis::selectClause &,
00061 const ibis::constPartList &,
00062 const ibis::whereClause &,
00063 ibis::array_t<ibis::bitvector*> &);
00064 static table* sift2S(const ibis::selectClause &,
00065 const ibis::constPartList &,
00066 const ibis::whereClause &);
00067 static table* sift2S(const ibis::selectClause &,
00068 const ibis::constPartList &,
00069 const ibis::array_t<ibis::bitvector*> &);
00070 static table* sift2S(const ibis::selectClause &,
00071 const ibis::constPartList &,
00072 const ibis::whereClause &,
00073 ibis::array_t<ibis::bitvector*> &);
00074
00075 protected:
00077 const ibis::whereClause *wc_;
00079 const ibis::constPartList *parts_;
00083 const ibis::selectClause *sel_;
00086 mutable array_t<ibis::bitvector*> hits_;
00088 mutable array_t<ibis::bitvector*> cand_;
00089
00092 filter() : wc_(0), parts_(0), sel_(0) {}
00093
00094 private:
00095 filter(const filter&);
00096 filter& operator=(const filter&);
00097 };
00098 #endif