+#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