ondisk_storage_manager.h

Go to the documentation of this file.
00001 
00004 #ifndef ONDISK_STORAGE_MANAGER_H
00005 #define ONDISK_STORAGE_MANAGER_H
00006 
00007 #include "storage_manager.h"
00008 #include "vectors.h"
00009 #include "timer.h"
00010 
00012 struct ondisk_storage_spec : storage_spec  {
00014   std::string external_table_name;
00016   std::string intermediate_table_name;
00017 };
00018 
00019 template <class T>
00020 class Hybrid_Storage_Manager;
00021 
00023 template <class T>
00024 class Ondisk_Storage_Manager : public Storage_Manager<T> {
00025  protected:
00027   std::string external_table_name;
00029   std::string hazy_intermediate_table_name;
00030   
00031   hazy_model::strategy _strategy;
00032 
00035   int unique_id_for_ps;
00036 
00042   void updateInternalTable(struct hazy_model &m);
00043   
00054   void update_disk_region(struct hazy_model &hm, double lower_bound, double upper_bound, double &waste_time);
00059   void rescan(struct hazy_model &hm);
00060   
00067   void setup(bool bRebuild, struct hazy_model &hm);
00068   
00069  public:
00075   Ondisk_Storage_Manager(Hazy_Database *db_conn, struct ondisk_storage_spec *spec);
00076   
00081   void resort(struct hazy_model &m);
00082   
00088   void incrementalUpdate(struct hazy_model &m, double &waste_time);
00089   
00096   virtual void insertEntity(struct hazy_model &m, key e, T f) = 0;
00097   // void loadFromFile(char*szFileName); // TODO: Overload for bulkloding
00098   
00099   // **********************
00100   // Read Methods
00101   // Single Entity Read
00108   void getEntityClass(key e, sClass &c, struct hazy_model &m);
00109   // All Members Read
00117   void getNumInClass(sClass c, int &nClass, struct hazy_model &m, double &waste_time);
00118   
00119   //Destructor
00120   ~Ondisk_Storage_Manager();
00121   // hybrid is a friend class so that it can access update_disk_region
00122   // friend class Hybrid_Storage_Manager<T>;
00123 };
00124 
00128 class Ondisk_Storage_Manager_Dense : public Ondisk_Storage_Manager<FVector> {
00129  public:
00130  Ondisk_Storage_Manager_Dense(Hazy_Database *db_conn, struct ondisk_storage_spec *spec, struct hazy_model &hm) : Ondisk_Storage_Manager<FVector>(db_conn, spec) {setup(spec->bRebuild, hm); }
00131   void insertEntity(struct hazy_model &m, key e, FVector f);    
00132 };
00133 
00137 class Ondisk_Storage_Manager_Sparse: public Ondisk_Storage_Manager<SVector> {
00138  public:
00139  Ondisk_Storage_Manager_Sparse(Hazy_Database *db_conn, struct ondisk_storage_spec *spec, struct hazy_model &hm) : Ondisk_Storage_Manager<SVector>(db_conn, spec) {setup(spec->bRebuild, hm); }
00140   void insertEntity(struct hazy_model &m, key e, SVector f);
00141 };
00142 
00143 
00147 template<class T>
00148 class Ondisk_Storage_Manager_Factory {
00149  protected:
00153   Ondisk_Storage_Manager<T>* build_storage_manager(Hazy_Database *db_conn, struct ondisk_storage_spec *spec) = 0;
00154  public:
00155   Ondisk_Storage_Manager_Factory() {}
00156 };
00157 
00158 template<>
00159 class Ondisk_Storage_Manager_Factory<SVector> {
00160  public:
00164   Ondisk_Storage_Manager<SVector>* build_storage_manager(Hazy_Database *db_conn, struct ondisk_storage_spec *spec, struct hazy_model &hm) { return new Ondisk_Storage_Manager_Sparse(db_conn, spec, hm); }
00165 };
00166 
00167 template<>
00168 class Ondisk_Storage_Manager_Factory<FVector> {
00169  public:
00173   Ondisk_Storage_Manager<FVector>* build_storage_manager(Hazy_Database *db_conn, struct ondisk_storage_spec *spec, struct hazy_model &hm) { return new Ondisk_Storage_Manager_Dense(db_conn, spec, hm); }
00174 };
00175 
00176 #include "ondisk_storage_manager.hxx"
00177 
00178 #endif

Generated on Wed Dec 15 10:46:15 2010 for Hazy_System by  doxygen 1.4.7