X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/2e2c5c148405f6b0c68608083204c2c1854adcfd..fbbe6f07bc8720030541b7319acb02c9233cd622:/hypercache.h diff --git a/hypercache.h b/hypercache.h new file mode 100644 index 0000000..53e0f67 --- /dev/null +++ b/hypercache.h @@ -0,0 +1,65 @@ +#ifndef HYPERCACHE_H +#define HYPERCACHE_H + +#include + +#include "configcache.h" + +using namespace std; + +class hypercache { + public: + static void initO(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, + char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL, writeout *out_a=NULL) { + initCache(O, cacheid, nequi, nskip, datadir+"/o", configmem, configMemSize, cachemode, out_a); + } + static void initC(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, + char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL, writeout *out_a=NULL) { + initCache(C, cacheid, nequi, nskip, datadir+"/c", configmem, configMemSize, cachemode, out_a); + } + + static void initO(const string& cacheid, char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL) { + initCache(O, "o", cacheid, configmem, configMemSize, cachemode); + } + static void initC(const string& cacheid, char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL) { + initCache(C, "c", cacheid, configmem, configMemSize, cachemode); + } + + static void addPara(const string& parid, const double& val=0); + static void setPara(const string& parid, const double& value); + static bool readO() { return O->readConfig(); } + static bool readC() { return C->readConfig(); } + static void writeO() { O->writeConfig(); } + static void writeC() { C->writeConfig(); } + static void writeHeaderO(const string& headerid, char *header, long unsigned int size) { O->writeHeader(headerid, header, size); } + static void *getHeaderO(const string& headerid) { O->getHeader(headerid); } + static void writeHeaderC(const string& headerid, char *header, long unsigned int size) { C->writeHeader(headerid, header, size); } + static void *getHeaderC(const string& headerid) { C->getHeader(headerid); } + + private: + struct defaults{ + int nequi; + int nskip; + string datadir; + writeout *out; + }; + struct para{ + string parid; + double val; + }; + + static void initCache(configcache *cache, + const string& cacheid, const int& nequi, const int& nskip, const string& datadir, + char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL, writeout *out_a=NULL); + + static void initCache( configcache *cache, const string& subdir, + const string& cacheid, char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL); + + static configcache *O; + static configcache *C; + static defaults *Defaults; + static vector delayedParaAdd; + static vector delayedParaSet; +}; + +#endif