]> git.treefish.org Git - phys/latlib.git/blob - hypercache.cpp
7e0f0e5492864eeca20ea17303c2e3bdb5a9f6aa
[phys/latlib.git] / hypercache.cpp
1 #include "hypercache.h"
2
3 configcache *hypercache::O = NULL;
4 configcache *hypercache::C = NULL;
5 vector<hypercache::para> hypercache::delayedParaAdd;
6 vector<hypercache::para> hypercache::delayedParaSet;
7
8 void hypercache::initCache(configcache **cache,
9                            const string& cacheid, const int& nequi, const int& nskip, const string& datadir, 
10                            char **configmem, const int& configMemSize, const int& cachemode, writeout *out_a) {
11   
12   bool allInitBefore = true;
13   
14   if (O == NULL || C == NULL)
15     allInitBefore = false;
16
17   *cache = new configcache(cacheid, nequi, nskip, datadir, configmem, configMemSize, cachemode, out_a);
18
19   if (O != NULL && C != NULL && !allInitBefore) {
20     for (vector<para>::iterator parit=delayedParaAdd.begin(); parit != delayedParaAdd.end(); ++parit) {
21       O->addPara(parit->parid, parit->val);
22       C->addPara(parit->parid, parit->val);
23     }
24     for (vector<para>::iterator parit=delayedParaSet.begin(); parit != delayedParaSet.end(); ++parit) {
25       O->setPara(parit->parid, parit->val);
26       C->setPara(parit->parid, parit->val);
27     }
28   }
29 }
30
31 void hypercache::addPara(const string& parid, const double& val) {
32   if (O == NULL || C == NULL) {
33     para newpara; 
34     newpara.parid = parid;
35     newpara.val = val;
36     delayedParaAdd.push_back(newpara);
37   }
38   else {
39     O->addPara(parid, val);
40     C->addPara(parid, val);
41   }
42 }
43
44 void hypercache::setPara(const string& parid, const double& val) {
45   if (O == NULL || C == NULL) {
46     para newpara; 
47     newpara.parid = parid;
48     newpara.val = val;
49     delayedParaSet.push_back(newpara);
50   }
51   else {
52     O->setPara(parid, val);
53     C->setPara(parid, val);
54   }
55 }
56
57 void hypercache::finalize() {
58   delete C;
59   delete O;
60 }