tafel.h
Go to the documentation of this file.
00001 // File: $Id$
00002 // Author: John Wu <John.Wu at ACM.org>
00003 // Copyright 2007-2012 the Regents of the University of California
00004 #ifndef IBIS_TAFEL_H
00005 #define IBIS_TAFEL_H
00006 #include "table.h"      // ibis::table
00007 #include "bitvector.h"  // ibis::bitvector
00008 
00011 
00012 namespace ibis {
00013     class tafel;
00014 }
00015 
00025 class ibis::tafel : public ibis::tablex {
00026 public:
00027     tafel() : mrows(0U) {}
00028     virtual ~tafel() {clear();}
00029 
00030     virtual int addColumn(const char* cname, ibis::TYPE_T ctype,
00031                           const char* cdesc, const char* idx);
00032     virtual int SQLCreateTable(const char *stmt, std::string&);
00033 
00034     virtual int append(const char* cname, uint64_t begin, uint64_t end,
00035                        void* values);
00036     virtual int appendRow(const ibis::table::row&);
00037     virtual int appendRow(const char*, const char*);
00038     virtual int appendRows(const std::vector<ibis::table::row>&);
00039     virtual int readCSV(const char* filename, int maxrows,
00040                         const char* outputdir, const char* delimiters);
00041     virtual int readSQLDump(const char* filename, std::string& tname,
00042                             int maxrows, const char* outputdir);
00043 
00044     virtual int write(const char* dir, const char* tname=0,
00045                       const char* tdesc=0, const char* idx=0,
00046                       const char* nvpairs=0) const;
00047     virtual int writeMetaData(const char* dir, const char* tname=0,
00048                               const char* tdesc=0, const char* idx=0,
00049                               const char* nvpairs=0) const;
00050 
00051     virtual void clearData();
00052     virtual int32_t reserveSpace(uint32_t);
00053     virtual uint32_t capacity() const;
00054 
00055     virtual uint32_t mRows() const {return mrows;}
00056     virtual uint32_t mColumns() const {return cols.size();}
00057     virtual void describe(std::ostream&) const;
00058     virtual table* toTable(const char* nm=0, const char* de=0);
00059 
00061     struct column {
00063         std::string name;
00065         std::string desc;
00067         std::string indexSpec;
00069         ibis::TYPE_T type;
00076         void* values;
00078         ibis::array_t<int64_t> starts;
00085         void* defval;
00087         ibis::bitvector mask;
00088 
00089         column();
00090         ~column();
00091     }; // column
00092     typedef std::map<const char*, column*, ibis::lessi> columnList;
00094     const columnList& getColumns() const {return cols;}
00095 
00096 protected:
00098     columnList cols;
00100     std::vector<column*> colorder;
00102     ibis::bitvector::word_t mrows;
00103 
00105     void clear();
00106 
00108     void normalize();
00109 
00110     template <typename T>
00111     void append(const T* in, ibis::bitvector::word_t be,
00112                 ibis::bitvector::word_t en, array_t<T>& out,
00113                 const T& fill, ibis::bitvector& mask) const;
00114     void appendString(const std::vector<std::string>* in,
00115                       ibis::bitvector::word_t be,
00116                       ibis::bitvector::word_t en,
00117                       std::vector<std::string>& out,
00118                       ibis::bitvector& mask) const;
00119     void appendRaw(const ibis::array_t<unsigned char>* in,
00120                    ibis::bitvector::word_t be,
00121                    ibis::bitvector::word_t en,
00122                    std::vector<std::string>& out,
00123                    ibis::bitvector& mask) const;
00124 
00125     template <typename T>
00126     void locate(ibis::TYPE_T, std::vector<array_t<T>*>& buf,
00127                 std::vector<ibis::bitvector*>& msk) const;
00128     void locateString(ibis::TYPE_T t,
00129                       std::vector<std::vector<std::string>*>& buf,
00130                       std::vector<ibis::bitvector*>& msk) const;
00131     template <typename T>
00132     void append(const std::vector<std::string>& nm, const std::vector<T>& va,
00133                 std::vector<array_t<T>*>& buf,
00134                 std::vector<ibis::bitvector*>& msk);
00135     void appendString(const std::vector<std::string>& nm,
00136                       const std::vector<std::string>& va,
00137                       std::vector<std::vector<std::string>*>& buf,
00138                       std::vector<ibis::bitvector*>& msk);
00139     int parseLine(const char* str, const char* del, const char* id);
00140 
00141     int32_t doReserve(uint32_t);
00142     int assignDefaultValue(ibis::tafel::column &col, const char *val) const;
00143     int readSQLStatement(std::istream &, ibis::fileManager::buffer<char>&,
00144                          ibis::fileManager::buffer<char>&) const;
00145     uint32_t preferredSize() const;
00146 
00147 private:
00148     tafel(const tafel&);
00149     tafel& operator=(const tafel&);
00150 }; // class ibis::tafel
00151 #endif // IBIS_TAFEL_H

Make It A Bit Faster
Contact us
Disclaimers
FastBit source code
FastBit mailing list archive