Go to the documentation of this file.00001
00002
00003
00004 #ifndef IBIS_JRANGE_H
00005 #define IBIS_JRANGE_H
00006
00013 #include "quaere.h"
00014
00015 namespace ibis {
00016 class jRange;
00017 }
00018
00037 class ibis::jRange : public ibis::quaere {
00038 public:
00039 jRange(const ibis::part& partr, const ibis::part& parts,
00040 const ibis::column& colr, const ibis::column& cols,
00041 double delta1, double delta2,
00042 const ibis::qExpr* condr, const ibis::qExpr* conds,
00043 const ibis::selectClause* sel, const ibis::fromClause* frm,
00044 const char* desc);
00045 virtual ~jRange();
00046
00047 virtual void roughCount(uint64_t& nmin, uint64_t& nmax) const;
00048 virtual int64_t count() const;
00049
00050 virtual ibis::table* select() const;
00051 virtual ibis::table* select(const char*) const;
00052 virtual ibis::table* select(const ibis::table::stringList& colnames) const;
00053
00054 protected:
00055 std::string desc_;
00056 const ibis::selectClause *sel_;
00057 const ibis::fromClause *frm_;
00058 const ibis::part& partr_;
00059 const ibis::part& parts_;
00060 const ibis::column& colr_;
00061 const ibis::column& cols_;
00062 ibis::bitvector maskr_;
00063 ibis::bitvector masks_;
00064 const double delta1_;
00065 const double delta2_;
00066
00067 mutable array_t<uint32_t> *orderr_;
00068 mutable array_t<uint32_t> *orders_;
00069 mutable void *valr_;
00070 mutable void *vals_;
00071 mutable int64_t nrows;
00072
00073 template <typename T>
00074 static table*
00075 fillResult(size_t nrows, double delta1, double delta2,
00076 const std::string &desc,
00077 const ibis::array_t<T>& rjcol,
00078 const ibis::table::typeList& rtypes,
00079 const ibis::table::bufferList& rbuff,
00080 const ibis::array_t<T>& sjcol,
00081 const ibis::table::typeList& stypes,
00082 const ibis::table::bufferList& sbuff,
00083 const ibis::table::stringList& cnamet,
00084 const std::vector<uint32_t>& cnpos);
00085
00086 private:
00087 jRange(const jRange&);
00088 jRange& operator=(const jRange&);
00089 };
00090 #endif