--- /dev/null
+#include "hypercache.h"
+
+hypercache::defaults *hypercache::Defaults = NULL;
+configcache *hypercache::O = NULL;
+configcache *hypercache::C = NULL;
+
+void hypercache::initCache(configcache *cache,
+ const string& cacheid, const int& nequi, const int& nskip, const string& datadir,
+ char **configmem, const int& configMemSize, const int& cachemode, writeout *out_a) {
+
+ bool allInitBefore = true;
+
+ if (O == NULL || C == NULL)
+ allInitBefore = false;
+
+ cache = new configcache(cacheid, nequi, nskip, datadir, configmem, configMemSize, cachemode, out_a);
+
+ if (Defaults == NULL) {
+ Defaults = new defaults;
+ Defaults->nequi = nequi;
+ Defaults->nskip = nskip;
+ Defaults->datadir = datadir;
+ Defaults->out = out_a;
+ }
+
+ if (O != NULL && C != NULL && !allInitBefore) {
+ for (vector<para>::iterator parit=delayedParaAdd.begin(); parit != delayedParaAdd.end(); ++parit) {
+ O->addPara(parit->parid, parit->val);
+ C->addPara(parit->parid, parit->val);
+ }
+ for (vector<para>::iterator parit=delayedParaSet.begin(); parit != delayedParaSet.end(); ++parit) {
+ O->setPara(parit->parid, parit->val);
+ C->setPara(parit->parid, parit->val);
+ }
+ }
+}
+
+void hypercache::initCache(configcache *cache, const string& subdir,
+ const string& cacheid, char **configmem, const int& configMemSize, const int& cachemode) {
+ if (Defaults == NULL) {
+ cerr << "Defaults were not initialized prior to short initialization!" << endl;
+ exit(1);
+ }
+
+ initCache(cache, cacheid, Defaults->nequi, Defaults->nskip, Defaults->datadir + "/" + subdir,
+ configmem, configMemSize, cachemode, Defaults->out);
+}
+
+void hypercache::addPara(const string& parid, const double& val) {
+ if (O == NULL || C == NULL) {
+ para newpara;
+ newpara.parid = parid;
+ newpara.val = val;
+ delayedParaAdd.push_back(newpara);
+ }
+ else {
+ O->addPara(parid, val);
+ C->addPara(parid, val);
+ }
+}
+
+void hypercache::setPara(const string& parid, const double& val) {
+ if (O == NULL || C == NULL) {
+ para newpara;
+ newpara.parid = parid;
+ newpara.val = val;
+ delayedParaSet.push_back(newpara);
+ }
+ else {
+ O->setPara(parid, val);
+ C->setPara(parid, val);
+ }
+}
--- /dev/null
+#ifndef HYPERCACHE_H
+#define HYPERCACHE_H
+
+#include <iostream>
+
+#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<para> delayedParaAdd;
+ static vector<para> delayedParaSet;
+};
+
+#endif