]> git.treefish.org Git - phys/latlib.git/blob - hypercache.cpp
added hypercache class, which combines observable and configuration cache.
[phys/latlib.git] / hypercache.cpp
1 #include "hypercache.h"
2
3 hypercache::defaults *hypercache::Defaults = NULL;
4 configcache *hypercache::O = NULL;
5 configcache *hypercache::C = NULL;
6
7 void hypercache::initCache(configcache *cache,
8                            const string& cacheid, const int& nequi, const int& nskip, const string& datadir, 
9                            char **configmem, const int& configMemSize, const int& cachemode, writeout *out_a) {
10   
11   bool allInitBefore = true;
12   
13   if (O == NULL || C == NULL)
14     allInitBefore = false;
15
16   cache = new configcache(cacheid, nequi, nskip, datadir, configmem, configMemSize, cachemode, out_a);
17   
18   if (Defaults == NULL) {
19     Defaults = new defaults;
20     Defaults->nequi = nequi;
21     Defaults->nskip = nskip;
22     Defaults->datadir = datadir;
23     Defaults->out = out_a;
24   }
25
26   if (O != NULL && C != NULL && !allInitBefore) {
27     for (vector<para>::iterator parit=delayedParaAdd.begin(); parit != delayedParaAdd.end(); ++parit) {
28       O->addPara(parit->parid, parit->val);
29       C->addPara(parit->parid, parit->val);
30     }
31     for (vector<para>::iterator parit=delayedParaSet.begin(); parit != delayedParaSet.end(); ++parit) {
32       O->setPara(parit->parid, parit->val);
33       C->setPara(parit->parid, parit->val);
34     }
35   }
36 }
37
38 void hypercache::initCache(configcache *cache, const string& subdir,
39                            const string& cacheid, char **configmem, const int& configMemSize, const int& cachemode) {
40   if (Defaults == NULL) {
41     cerr << "Defaults were not initialized prior to short initialization!" << endl;
42     exit(1);
43   }
44   
45   initCache(cache, cacheid, Defaults->nequi, Defaults->nskip, Defaults->datadir + "/" + subdir, 
46             configmem, configMemSize, cachemode, Defaults->out);
47 }
48
49 void hypercache::addPara(const string& parid, const double& val) {
50   if (O == NULL || C == NULL) {
51     para newpara; 
52     newpara.parid = parid;
53     newpara.val = val;
54     delayedParaAdd.push_back(newpara);
55   }
56   else {
57     O->addPara(parid, val);
58     C->addPara(parid, val);
59   }
60 }
61
62 void hypercache::setPara(const string& parid, const double& val) {
63   if (O == NULL || C == NULL) {
64     para newpara; 
65     newpara.parid = parid;
66     newpara.val = val;
67     delayedParaSet.push_back(newpara);
68   }
69   else {
70     O->setPara(parid, val);
71     C->setPara(parid, val);
72   }
73 }