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
00098
00099
00100
00101
00108 void getEntityClass(key e, sClass &c, struct hazy_model &m);
00109
00117 void getNumInClass(sClass c, int &nClass, struct hazy_model &m, double &waste_time);
00118
00119
00120 ~Ondisk_Storage_Manager();
00121
00122
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