00001
00002
00003
00004
00005
00006
00007 #ifndef CIF_LOAD_REORGANIZER_H
00008 #define CIF_LOAD_REORGANIZER_H
00009
00010
00011 #include "mapped_ptr_vector.h"
00012 #include "mapped_ptr_vector.C"
00013
00014 #include "CifReorganizerBase.h"
00015 #include "DdlFile.h"
00016 #include "DicFile.h"
00017
00018
00019 class DdlLoadCont : public DdlCont
00020 {
00021 protected:
00022 int _verbose;
00023 DicFile* _dic;
00024
00025 virtual void LoadDdlItems(vector<vector<string> >& combo,
00026 const unsigned int configIndex);
00027 virtual void LoadDdlItems(vector<vector<string> >& combo,
00028 const unsigned int configIndex, const string& value);
00029
00030 public:
00031 DdlLoadCont(FileNavigator* fnav, DicFile* dicFile,
00032 const string& dataBlockName, const string& id,
00033 DdlContInfo& inDdlContInfo);
00034 virtual ~DdlLoadCont();
00035
00036 void SetVerbose(int verbose);
00037
00038 virtual int Load();
00039 };
00040
00041
00042 class DdlItemCont : public DdlLoadCont
00043 {
00044 private:
00045 typedef struct
00046 {
00047 string name;
00048 int generation;
00049 } family_member;
00050
00051
00052 vector<family_member> _decendency;
00053
00054 void GetItemDecendency(vector<family_member>& decendency);
00055
00056 void LoadDdlItems(vector<vector<string> >& combo,
00057 const unsigned int configIndex);
00058
00059 public:
00060 DdlItemCont(FileNavigator* fnav, DicFile* dicFile,
00061 const string& dataBlockName, const string& itemName);
00062 ~DdlItemCont();
00063
00064 int Load();
00065 };
00066
00067
00068 class DdlDictCont : public DdlLoadCont
00069 {
00070 private:
00071 mapped_ptr_vector<DdlCont> _items;
00072 mapped_ptr_vector<DdlCont> _subcategories;
00073 mapped_ptr_vector<DdlCont> _categories;
00074
00075 void Init();
00076
00077 int WriteDdlContLocations(const vector<uWord>& indices);
00078
00079 int BuildDdlContainers(unsigned int index, const string& ddlCatName,
00080 const string& ddlItemName, mapped_ptr_vector<DdlCont>& containers);
00081
00082 void LoadDdlItems(vector<vector<string> >& combo,
00083 const unsigned int configIndex);
00084
00085 DdlCont* GetDdlContainers(const string& contName,
00086 mapped_ptr_vector<DdlCont>& containers, const DdlContInfo& contInfo);
00087
00088 public:
00089 DdlDictCont(const string& dataBlockName, FileNavigator* fnav);
00090 DdlDictCont(const string& dataBlockName, FileNavigator* fnav,
00091 DicFile* dicFile);
00092 virtual ~DdlDictCont();
00093
00094 int Load();
00095 int Write();
00096 int Read(uWord which);
00097
00098 DdlCont* GetDdlCont(const string& contName, const DdlContInfo& contInfo);
00099
00100 int PrintDdlContainers(const string& ddlCatName,
00101 const string& ddlItemName, const DdlContInfo& contInfo);
00102 };
00103
00104
00105 class DictFileCont
00106 {
00107 private:
00108 bool _verbose;
00109
00110 string _ddlFileName;
00111 string _dicFileName;
00112 string _fnavFileName;
00113
00114 DdlFile* _ddl;
00115 DicFile* _dic;
00116 FileNavigator* _fnav;
00117
00118 ISTable* _ddlformat;
00119 ISTable* _dicformat;
00120
00121 mapped_ptr_vector<DdlDictCont> _dictionaries;
00122
00123 DdlDictCont* _currDictContP;
00124
00125 void IntInit(const string& fnavFileName);
00126
00127 void OpenFile(const eFileMode fileMode);
00128
00129 public:
00130 DictFileCont(const string& fnavFileName, const string& dicFileName,
00131 const string& ddlFileName, const bool verbose = false);
00132 DictFileCont(const string& fnavFileName);
00133 ~DictFileCont();
00134
00135 int Init();
00136 int Write();
00137 void Read();
00138
00139 unsigned int GetNumDictionaries();
00140 void GetDictionaryNames(vector<string>& dictNames);
00141
00142 void SetCurrentDictionary(const string& dictionaryName);
00143 DdlDictCont* GetCurrDictCont();
00144
00145 void Print();
00146 };
00147
00148
00149 #endif
00150