00001 // File: $Id$ 00002 // Author: John Wu <John.Wu at ACM.org> 00003 // Copyright 2010-2012 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 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&); // no copying 00088 jRange& operator=(const jRange&); // no assignment 00089 }; // class ibis::jRange 00090 #endif
![]() |