X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/2e2c5c148405f6b0c68608083204c2c1854adcfd..fbbe6f07bc8720030541b7319acb02c9233cd622:/hypercache.cpp diff --git a/hypercache.cpp b/hypercache.cpp new file mode 100644 index 0000000..8fcc609 --- /dev/null +++ b/hypercache.cpp @@ -0,0 +1,73 @@ +#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::iterator parit=delayedParaAdd.begin(); parit != delayedParaAdd.end(); ++parit) { + O->addPara(parit->parid, parit->val); + C->addPara(parit->parid, parit->val); + } + for (vector::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); + } +}