00001 // File: $Id$ 00002 // Author: John Wu <John.Wu at ACM.org> 00003 // Copyright 2010-2011 the Regents of the University of California 00004 #ifndef IBIS_JRANGE_H 00005 #define IBIS_JRANGE_H 00006 00013 #include "quaere.h" // ibis::quaere 00014 00015 namespace ibis { 00016 class jRange; // forward definition 00017 } // namespace ibis 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 ibis::table::stringList& colnames) const; 00052 00053 protected: 00054 std::string desc_; 00055 const ibis::selectClause *sel_; 00056 const ibis::fromClause *frm_; 00057 const ibis::part& partr_; 00058 const ibis::part& parts_; 00059 const ibis::column& colr_; 00060 const ibis::column& cols_; 00061 ibis::bitvector maskr_; 00062 ibis::bitvector masks_; 00063 const double delta1_; 00064 const double delta2_; 00065 00066 mutable array_t<uint32_t> *orderr_; 00067 mutable array_t<uint32_t> *orders_; 00068 mutable void *valr_; 00069 mutable void *vals_; 00070 mutable int64_t nrows; 00071 00072 template <typename T> 00073 static table* 00074 fillResult(size_t nrows, double delta1, double delta2, 00075 const std::string &desc, 00076 const ibis::array_t<T>& rjcol, 00077 const ibis::table::typeList& rtypes, 00078 const ibis::table::bufferList& rbuff, 00079 const ibis::array_t<T>& sjcol, 00080 const ibis::table::typeList& stypes, 00081 const ibis::table::bufferList& sbuff, 00082 const ibis::table::stringList& cnamet, 00083 const std::vector<uint32_t>& cnpos); 00084 00085 private: 00086 jRange(const jRange&); // no copying 00087 jRange& operator=(const jRange&); // no assignment 00088 }; // class ibis::jRange 00089 #endif
![]() |