]> git.treefish.org Git - phys/latlib.git/blob - paraq.h
Made c++11 standard dependency obsolete.
[phys/latlib.git] / paraq.h
1 #ifndef PARAQ_H
2 #define PARAQ_H
3
4 #include <string>
5 #include <map>
6 #include <vector>
7
8 #define LINK_1TO1 0
9 #define LINK_NEGATIVE 1
10
11 using namespace std;
12
13 class paraq {
14  private:
15   struct paralink {
16     string first;
17     string second;
18     int linktype;
19   };
20
21  public: 
22   paraq(int nprocs, int rank);
23   void addRange(const string& paraid, double min, double max, double step);
24   int nextParas();
25   double& operator[] (string paraid);
26   void addRange(const string& paraid, double range[3]) { addRange(paraid, range[0], range[1], range[2]); }
27   void addRange(const string& paraid, char *range);
28   void setDefault(const string& paraid, double value) { defaultPara[paraid] = value; uniqueAllParaIdsAdd(paraid); }
29   
30   void linkParas(const string& paraid1, const string &paraid2, int linktype=LINK_1TO1) {
31     paralink tmpLink;
32
33     tmpLink.first = paraid1;
34     tmpLink.second = paraid2;
35     tmpLink.linktype = linktype;
36
37     linkedParas.push_back( tmpLink );
38     //linkedParas.push_back( make_pair(paraid1,paraid2) );
39   }
40   int getTotalJobs();
41   string rangeString();
42   vector<string> allParaIds;
43   string getParaNames();
44   string getParaVals();
45
46  private:
47   int nprocs, rank;
48   int thisjob;
49   map<string,double> defaultPara;
50   map< string, vector<double> > paraMap;
51   map< string, vector<double*> > rangeMap;
52   vector<paralink> linkedParas;
53   vector< map<string,double>  > jobList;
54   void initJobList();
55   bool inParas(vector<double>& paraVec, double& tofind);
56   double masterdefault;
57   bool jobListInitialized;
58   void uniqueAllParaIdsAdd(const string& paraid);
59   double linkTypeFunction (double linkval, int linktype);
60 };
61
62 #endif