]> git.treefish.org Git - phys/latlib.git/blob - configcache.h
Added writeoutdir sequencing for equal timestamps.
[phys/latlib.git] / configcache.h
1 #ifndef CONFIGCACHE_H
2 #define CONFIGCACHE_H
3
4 #include <vector>
5 #include <string>
6 #include <fstream>
7 #include <sstream>
8 #include <ostream>
9
10 #define CACHE_MODE_DISABLED 0
11 #define CACHE_MODE_READ 1
12 #define CACHE_MODE_FULL 2
13
14 using namespace std;
15
16 struct parameter{
17   string id;
18   double val;
19 };
20
21 struct infiledesc {
22   string filename;
23   int nequi;
24   int nskip;
25   bool extended;
26 };
27
28 class configcache{
29  public:
30   ~configcache();
31   configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize, 
32               const int& cachemode=CACHE_MODE_FULL, ostream *_log=NULL);
33   void readConfig(bool *readnewconfig, int *nequileft, vector<unsigned long> *excludeFileHashes=NULL);
34   void writeConfig(int actnequi);
35   void addPara(const string& parid, const double& val=0);
36   void setPara(const string& parid, const double& value);
37   void writeHeader(const string& headerid, const char *header, long unsigned int size, int actnequi);
38   void * getHeader(const string& headerid);
39   string getOutFileName() { return outFileName.str(); }
40   string getInFileName() { return DATADIR + "/" + openFileDesc.filename; }
41   static unsigned long hash(const string& str);
42   void closeInFile() { inFile.close(); }
43   int inFilesLeft() { return inFiles.size(); }
44   char* getConfigMem() { return configMem; }
45   int getConfigSize() { return configSize; }
46   bool isOutFileOpen () { return outFile.is_open(); }
47   void finishOutFile();
48
49  private:
50   struct iobuffers;
51   iobuffers *ioBuffers;
52
53   ostream* log;
54   infiledesc openFileDesc;
55   int getParIndex(const string& parid);
56   int NEQUI;
57   int NSKIP;
58   string DATADIR;
59   string CACHEID;
60   int MODE;
61   string getFileId(int actnequi, const bool& shortid=false);
62
63   ofstream outFile;
64   ifstream inFile;
65
66   stringstream outFileName;
67
68   int readnum;
69
70   int inSize;
71
72   int configSize;
73   char *configMem;
74   char *tmpConfig;
75
76   bool refetchDataFiles;
77
78   void fetchDataFiles();
79   
80   bool isValidInFile(const string& infile, infiledesc *filedesc);
81
82   vector<infiledesc> inFiles;
83
84   vector<parameter> Paras;
85
86   int readDataToMem(char *tmpData, long unsigned int dataSize);
87
88   void openOutFile(int actnequi);
89
90   int readHeader();
91
92   bool headerWritten;
93
94   int readFullBlock(char *tmpData, long unsigned int dataSize);
95
96   vector< pair<unsigned long, void *> > headerStore;
97
98   void deleteHeaderStore();
99
100   bool readAllHeaders();
101
102   vector<infiledesc>::iterator getNextInfile(vector<unsigned long> *excludeFileHashes);
103
104   int nequileft_internal;
105
106   bool doVirtualEquilibration, firstUsedConfig;
107 };
108
109 #endif