Go to the documentation of this file.00001
00002
00003
00004 #ifndef IBIS_JNATURAL_H
00005 #define IBIS_JNATURAL_H
00006
00012 #include "quaere.h"
00013
00014 namespace ibis {
00015 class jNatural;
00016 }
00017
00024 class FASTBIT_CXX_DLLSPEC ibis::jNatural : public ibis::quaere {
00025 public:
00026 jNatural(const ibis::part* partr, const ibis::part* parts,
00027 const char* colname, const char* condr, const char* conds,
00028 const char* sel);
00029 jNatural(const ibis::part* partr, const ibis::part* parts,
00030 const ibis::column* colr, const ibis::column* cols,
00031 const ibis::qExpr* condr, const ibis::qExpr* conds,
00032 const ibis::selectClause* sel, const ibis::fromClause* frm,
00033 const char* desc);
00034 virtual ~jNatural();
00035
00036 virtual void roughCount(uint64_t& nmin, uint64_t& nmax) const;
00037 virtual int64_t count() const;
00038
00039 virtual ibis::table* select() const;
00040 virtual ibis::table* select(const char*) const;
00041 virtual ibis::table* select(const ibis::table::stringList& colnames) const;
00042
00043 protected:
00044 std::string desc_;
00045 const ibis::selectClause *sel_;
00046 const ibis::fromClause *frm_;
00047 const ibis::part& R_;
00048 const ibis::part& S_;
00049 const ibis::column& colR_;
00050 const ibis::column& colS_;
00051 ibis::bitvector maskR_;
00052 ibis::bitvector maskS_;
00053
00054 mutable array_t<uint32_t> *orderR_;
00055 mutable array_t<uint32_t> *orderS_;
00056 mutable void *valR_;
00057 mutable void *valS_;
00058 mutable int64_t nrows;
00059
00060 template <typename T>
00061 static table*
00062 fillResult(size_t nrows,
00063 const std::string &desc,
00064 const ibis::array_t<T>& rjcol,
00065 const ibis::table::typeList& rtypes,
00066 const ibis::table::bufferList& rbuff,
00067 const ibis::array_t<T>& sjcol,
00068 const ibis::table::typeList& stypes,
00069 const ibis::table::bufferList& sbuff,
00070 const ibis::table::stringList& cnamet,
00071 const std::vector<uint32_t>& cnpos);
00072 static table*
00073 fillResult(size_t nrows,
00074 const std::string &desc,
00075 const std::vector<std::string>& rjcol,
00076 const ibis::table::typeList& rtypes,
00077 const ibis::table::bufferList& rbuff,
00078 const std::vector<std::string>& sjcol,
00079 const ibis::table::typeList& stypes,
00080 const ibis::table::bufferList& sbuff,
00081 const ibis::table::stringList& cnamet,
00082 const std::vector<uint32_t>& cnpos);
00083
00084 private:
00085 jNatural(const jNatural&);
00086 jNatural& operator=(const jNatural&);
00087 };
00088 #endif