CYCLUS
query_backend.h
Go to the documentation of this file.
1 #ifndef CYCLUS_SRC_QUERY_BACKEND_H_
2 #define CYCLUS_SRC_QUERY_BACKEND_H_
3 
4 #include <climits>
5 #include <list>
6 #include <map>
7 #include <set>
8 
9 #include <boost/uuid/sha1.hpp>
10 
11 #include "blob.h"
12 #include "rec_backend.h"
13 #include "any.hpp"
14 
15 #define CYCLUS_UUID_SIZE 16
16 #define CYCLUS_SHA1_SIZE 20
17 #define CYCLUS_SHA1_NINT 5
18 
19 namespace cyclus {
20 
21 /// This is the master list of all supported database types. All types must
22 /// have a constant length unless they begin with the prefix VL_, which stands
23 /// for "variable length" or are implicitly variable length, such as blob.
24 /// Changing the order here may invalidate previously created databases.
25 /// Thus only append to this enum if it is post-1.0.
26 enum DbTypes {
27  // primitive types
28  BOOL = 0, // ["bool", 0, ["HDF5", "SQLite"], "BOOL", false]
29  INT, // ["int", 0, ["HDF5", "SQLite"], "INT", false]
30  FLOAT, // ["float", 0, ["HDF5", "SQLite"], "FLOAT", false]
31  DOUBLE, // ["double", 0, ["HDF5", "SQLite"], "DOUBLE", false]
32  STRING, // ["std::string", 1, ["HDF5", "SQLite"], "STRING", false]
33  VL_STRING, // ["std::string", 1, ["HDF5", "SQLite"], "VL_STRING", true]
34  BLOB, // ["cyclus::Blob", 0, ["HDF5", "SQLite"], "BLOB", true]
35  UUID, // ["boost::uuids::uuid", 0, ["HDF5", "SQLite"], "UUID", false]
36  // vector types
37  VECTOR_BOOL, // ["std::vector<bool>", 1, [], ["VECTOR", "BOOL"], false]
38  VL_VECTOR_BOOL, // ["std::vector<bool>", 1, [], ["VL_VECTOR", "BOOL"], true]
39  VECTOR_INT, // ["std::vector<int>", 1, ["HDF5", "SQLite"], ["VECTOR", "INT"], false]
40  VL_VECTOR_INT, // ["std::vector<int>", 1, ["HDF5", "SQLite"], ["VL_VECTOR", "INT"], true]
41  VECTOR_FLOAT, // ["std::vector<float>", 1, ["HDF5"], ["VECTOR", "FLOAT"], false]
42  VL_VECTOR_FLOAT, // ["std::vector<float>", 1, ["HDF5"], ["VL_VECTOR", "FLOAT"], true]
43  VECTOR_DOUBLE, // ["std::vector<double>", 1, ["HDF5", "SQLite"], ["VECTOR", "DOUBLE"], false]
44  VL_VECTOR_DOUBLE, // ["std::vector<double>", 1, ["HDF5", "SQLite"], ["VL_VECTOR", "DOUBLE"], true]
45  VECTOR_STRING, // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VECTOR", "STRING"], false]
46  VL_VECTOR_STRING, // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VL_VECTOR", "STRING"], true]
47  VECTOR_VL_STRING, // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VECTOR", "VL_STRING"], false]
48  VL_VECTOR_VL_STRING, // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VL_VECTOR", "VL_STRING"], true]
49  VECTOR_BLOB, // ["std::vector<cyclus::Blob>", 1, [], ["VECTOR", "BLOB"], false]
50  VL_VECTOR_BLOB, // ["std::vector<cyclus::Blob>", 1, [], ["VL_VECTOR", "BLOB"], true]
51  VECTOR_UUID, // ["std::vector<boost::uuids::uuid>", 1, [], ["VECTOR", "UUID"], false]
52  VL_VECTOR_UUID, // ["std::vector<boost::uuids::uuid>", 1, [], ["VL_VECTOR", "UUID"], true]
53  // set types
54  SET_BOOL, // ["std::set<bool>", 1, [], ["SET", "BOOL"], false]
55  VL_SET_BOOL, // ["std::set<bool>", 1, [], ["VL_SET", "BOOL"], true]
56  SET_INT, // ["std::set<int>", 1, ["HDF5", "SQLite"], ["SET", "INT"], false]
57  VL_SET_INT, // ["std::set<int>", 1, ["HDF5", "SQLite"], ["VL_SET", "INT"], true]
58  SET_FLOAT, // ["std::set<float>", 1, [], ["SET", "FLOAT"], false]
59  VL_SET_FLOAT, // ["std::set<float>", 1, [], ["VL_SET", "FLOAT"], true]
60  SET_DOUBLE, // ["std::set<double>", 1, [], ["SET", "DOUBLE"], false]
61  VL_SET_DOUBLE, // ["std::set<double>", 1, [], ["VL_SET", "DOUBLE"], true]
62  SET_STRING, // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["SET", "STRING"], false]
63  VL_SET_STRING, // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["VL_SET", "STRING"], true]
64  SET_VL_STRING, // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["SET", "VL_STRING"], false]
65  VL_SET_VL_STRING, // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["VL_SET", "VL_STRING"], true]
66  SET_BLOB, // ["std::set<cyclus::Blob>", 1, [], ["SET", "BLOB"], false]
67  VL_SET_BLOB, // ["std::set<cyclus::Blob>", 1, [], ["VL_SET", "BLOB"], true]
68  SET_UUID, // ["std::set<boost::uuids::uuid>", 1, [], ["SET", "UUID"], false]
69  VL_SET_UUID, // ["std::set<boost::uuids::uuid>", 1, [], ["VL_SET", "UUID"], true]
70  // list types
71  LIST_BOOL, // ["std::list<bool>", 1, [], ["LIST", "BOOL"], false]
72  VL_LIST_BOOL, // ["std::list<bool>", 1, [], ["VL_LIST", "BOOL"], true]
73  LIST_INT, // ["std::list<int>", 1, ["HDF5", "SQLite"], ["LIST", "INT"], false]
74  VL_LIST_INT, // ["std::list<int>", 1, ["HDF5", "SQLite"], ["VL_LIST", "INT"], true]
75  LIST_FLOAT, // ["std::list<float>", 1, [], ["LIST", "FLOAT"], false]
76  VL_LIST_FLOAT, // ["std::list<float>", 1, [], ["VL_LIST", "FLOAT"], true]
77  LIST_DOUBLE, // ["std::list<double>", 1, [], ["LIST", "DOUBLE"], false]
78  VL_LIST_DOUBLE, // ["std::list<double>", 1, [], ["VL_LIST", "DOUBLE"], true]
79  LIST_STRING, // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["LIST", "STRING"], false]
80  VL_LIST_STRING, // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["VL_LIST", "STRING"], true]
81  LIST_VL_STRING, // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["LIST", "VL_STRING"], false]
82  VL_LIST_VL_STRING, // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["VL_LIST", "VL_STRING"], true]
83  LIST_BLOB, // ["std::list<cyclus::Blob>", 1, [], ["LIST", "BLOB"], false]
84  VL_LIST_BLOB, // ["std::list<cyclus::Blob>", 1, [], ["VL_LIST", "BLOB"], true]
85  LIST_UUID, // ["std::list<boost::uuids::uuid>", 1, [], ["LIST", "UUID"], false]
86  VL_LIST_UUID, // ["std::list<boost::uuids::uuid>", 1, [], ["VL_LIST", "UUID"], true]
87  // pairs - not variable length
88  PAIR_INT_BOOL, // ["std::pair<int, bool>", 0, [], ["PAIR", "INT", "BOOL"], false]
89  PAIR_INT_INT, // ["std::pair<int, int>", 0, ["HDF5"], ["PAIR", "INT", "INT"], false]
90  PAIR_INT_FLOAT, // ["std::pair<int, float>", 0, [], ["PAIR", "INT", "FLOAT"], false]
91  PAIR_INT_DOUBLE, // ["std::pair<int, double>", 0, [], ["PAIR", "INT", "DOUBLE"], false]
92  PAIR_INT_STRING, // ["std::pair<int, std::string>", 1, ["HDF5"], ["PAIR", "INT", "STRING"], false]
93  PAIR_INT_VL_STRING, // ["std::pair<int, std::string>", 1, ["HDF5"], ["PAIR", "INT", "VL_STRING"], false]
94  PAIR_INT_BLOB, // ["std::pair<int, cyclus::Blob>", 0, [], ["PAIR", "INT", "BLOB"], false]
95  PAIR_INT_UUID, // ["std::pair<int, boost::uuids::uuid>", 0, [], ["PAIR", "INT", "UUID"], false]
96  PAIR_STRING_BOOL, // ["std::pair<std::string, bool>", 1, [], ["PAIR", "STRING", "BOOL"], false]
97  PAIR_STRING_INT, // ["std::pair<std::string, int>", 1, [], ["PAIR", "STRING", "INT"], false]
98  PAIR_STRING_FLOAT, // ["std::pair<std::string, float>", 1, [], ["PAIR", "STRING", "FLOAT"], false]
99  PAIR_STRING_DOUBLE, // ["std::pair<std::string, double>", 1, [], ["PAIR", "STRING", "DOUBLE"], false]
100  PAIR_STRING_STRING, // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "STRING", "STRING"], false]
101  PAIR_STRING_VL_STRING, // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "STRING", "VL_STRING"], false]
102  PAIR_STRING_BLOB, // ["std::pair<std::string, cyclus::Blob>", 1, [], ["PAIR", "STRING", "BLOB"], false]
103  PAIR_STRING_UUID, // ["std::pair<std::string, boost::uuids::uuid>", 1, [], ["PAIR", "STRING", "UUID"], false]
104  PAIR_VL_STRING_BOOL, // ["std::pair<std::string, bool>", 1, [], ["PAIR", "VL_STRING", "BOOL"], false]
105  PAIR_VL_STRING_INT, // ["std::pair<std::string, int>", 1, [], ["PAIR", "VL_STRING", "INT"], false]
106  PAIR_VL_STRING_FLOAT, // ["std::pair<std::string, float>", 1, [], ["PAIR", "VL_STRING", "FLOAT"], false]
107  PAIR_VL_STRING_DOUBLE, // ["std::pair<std::string, double>", 1, [], ["PAIR", "VL_STRING", "DOUBLE"], false]
108  PAIR_VL_STRING_STRING, // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "VL_STRING", "STRING"], false]
109  PAIR_VL_STRING_VL_STRING, // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "VL_STRING", "VL_STRING"], false]
110  PAIR_VL_STRING_BLOB, // ["std::pair<std::string, cyclus::Blob>", 1, [], ["PAIR", "VL_STRING", "BLOB"], false]
111  PAIR_VL_STRING_UUID, // ["std::pair<std::string, boost::uuids::uuid>", 1, [], ["PAIR", "VL_STRING", "UUID"], false]
112  // maps with int keys
113  MAP_INT_BOOL, // ["std::map<int, bool>", 1, [], ["MAP", "INT", "BOOL"], false]
114  VL_MAP_INT_BOOL, // ["std::map<int, bool>", 1, [], ["VL_MAP", "INT", "BOOL"], true]
115  MAP_INT_INT, // ["std::map<int, int>", 1, ["HDF5", "SQLite"], ["MAP", "INT", "INT"], false]
116  VL_MAP_INT_INT, // ["std::map<int, int>", 1, ["HDF5", "SQLite"], ["VL_MAP", "INT", "INT"], true]
117  MAP_INT_FLOAT, // ["std::map<int, float>", 1, [], ["MAP", "INT", "FLOAT"], false]
118  VL_MAP_INT_FLOAT, // ["std::map<int, float>", 1, [], ["VL_MAP", "INT", "FLOAT"], true]
119  MAP_INT_DOUBLE, // ["std::map<int, double>", 1, ["HDF5", "SQLite"], ["MAP", "INT", "DOUBLE"], false]
120  VL_MAP_INT_DOUBLE, // ["std::map<int, double>", 1, ["HDF5", "SQLite"], ["VL_MAP", "INT", "DOUBLE"], true]
121  MAP_INT_STRING, // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["MAP", "INT", "STRING"], false]
122  VL_MAP_INT_STRING, // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["VL_MAP", "INT", "STRING"], true]
123  MAP_INT_VL_STRING, // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["MAP", "INT", "VL_STRING"], false]
124  VL_MAP_INT_VL_STRING, // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["VL_MAP", "INT", "VL_STRING"], true]
125  MAP_INT_BLOB, // ["std::map<int, cyclus::Blob>", 1, [], ["MAP", "INT", "BLOB"], false]
126  VL_MAP_INT_BLOB, // ["std::map<int, cyclus::Blob>", 1, [], ["VL_MAP", "INT", "BLOB"], true]
127  MAP_INT_UUID, // ["std::map<int, boost::uuids::uuid>", 1, [], ["MAP", "INT", "UUID"], false]
128  VL_MAP_INT_UUID, // ["std::map<int, boost::uuids::uuid>", 1, [], ["VL_MAP", "INT", "UUID"], true]
129  // maps with fixed-length string keys
130  MAP_STRING_BOOL, // ["std::map<std::string, bool>", 2, [], ["MAP", "STRING", "BOOL"], false]
131  VL_MAP_STRING_BOOL, // ["std::map<std::string, bool>", 2, [], ["VL_MAP", "STRING", "BOOL"], true]
132  MAP_STRING_INT, // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["MAP", "STRING", "INT"], false]
133  VL_MAP_STRING_INT, // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "INT"], true]
134  MAP_STRING_FLOAT, // ["std::map<std::string, float>", 2, [], ["MAP", "STRING", "FLOAT"], false]
135  VL_MAP_STRING_FLOAT, // ["std::map<std::string, float>", 2, [], ["VL_MAP", "STRING", "FLOAT"], true]
136  MAP_STRING_DOUBLE, // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["MAP", "STRING", "DOUBLE"], false]
137  VL_MAP_STRING_DOUBLE, // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "DOUBLE"], true]
138  MAP_STRING_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "STRING", "STRING"], false]
139  VL_MAP_STRING_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "STRING"], true]
140  MAP_STRING_VL_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "STRING", "VL_STRING"], false]
141  VL_MAP_STRING_VL_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "VL_STRING"], true]
142  MAP_STRING_BLOB, // ["std::map<std::string, cyclus::Blob>", 2, [], ["MAP", "STRING", "BLOB"], false]
143  VL_MAP_STRING_BLOB, // ["std::map<std::string, cyclus::Blob>", 2, [], ["VL_MAP", "STRING", "BLOB"], true]
144  MAP_STRING_UUID, // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["MAP", "STRING", "UUID"], false]
145  VL_MAP_STRING_UUID, // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["VL_MAP", "STRING", "UUID"], true]
146  // maps with variable length string keys
147  MAP_VL_STRING_BOOL, // ["std::map<std::string, bool>", 2, [], ["MAP", "VL_STRING", "BOOL"], false]
148  VL_MAP_VL_STRING_BOOL, // ["std::map<std::string, bool>", 2, [], ["VL_MAP", "VL_STRING", "BOOL"], true]
149  MAP_VL_STRING_INT, // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "INT"], false]
150  VL_MAP_VL_STRING_INT, // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "INT"], true]
151  MAP_VL_STRING_FLOAT, // ["std::map<std::string, float>", 2, [], ["MAP", "VL_STRING", "FLOAT"], false]
152  VL_MAP_VL_STRING_FLOAT, // ["std::map<std::string, float>", 2, [], ["VL_MAP", "VL_STRING", "FLOAT"], true]
153  MAP_VL_STRING_DOUBLE, // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "DOUBLE"], false]
154  VL_MAP_VL_STRING_DOUBLE, // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "DOUBLE"], true]
155  MAP_VL_STRING_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "STRING"], false]
156  VL_MAP_VL_STRING_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "STRING"], true]
157  MAP_VL_STRING_VL_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "VL_STRING"], false]
158  VL_MAP_VL_STRING_VL_STRING, // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "VL_STRING"], true]
159  MAP_VL_STRING_BLOB, // ["std::map<std::string, cyclus::Blob>", 2, [], ["MAP", "VL_STRING", "BLOB"], false]
160  VL_MAP_VL_STRING_BLOB, // ["std::map<std::string, cyclus::Blob>", 2, [], ["VL_MAP", "VL_STRING", "BLOB"], true]
161  MAP_VL_STRING_UUID, // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["MAP", "VL_STRING", "UUID"], false]
162  VL_MAP_VL_STRING_UUID, // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["VL_MAP", "VL_STRING", "UUID"], true]
163  // maps with pair<int, string> keys and double values
164  MAP_PAIR_INT_STRING_DOUBLE, // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["MAP", ["PAIR", "INT", "STRING"], "DOUBLE"], false]
165  VL_MAP_PAIR_INT_STRING_DOUBLE, // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["VL_MAP", ["PAIR", "INT", "STRING"], "DOUBLE"], true]
166  MAP_PAIR_INT_VL_STRING_DOUBLE, // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["MAP", ["PAIR", "INT", "VL_STRING"], "DOUBLE"], false]
167  VL_MAP_PAIR_INT_VL_STRING_DOUBLE, // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["VL_MAP", ["PAIR", "INT", "VL_STRING"], "DOUBLE"], true]
168 
169  // append new types only:
170 
171  // map<string, vector<double> >
172  MAP_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "STRING", ["VECTOR", "DOUBLE"]], false]
173  MAP_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", "DOUBLE"]], false]
174  VL_MAP_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", "DOUBLE"]], true]
175  MAP_VL_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", "DOUBLE"]], false]
176  MAP_VL_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", "DOUBLE"]], false]
177  VL_MAP_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", "DOUBLE"]], true]
178  VL_MAP_VL_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", "DOUBLE"]], true]
179  VL_MAP_VL_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", "DOUBLE"]], true]
180 
181  // map<string, map<int, double> >
182  MAP_STRING_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "INT", "DOUBLE"]], false]
183  MAP_STRING_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "INT", "DOUBLE"]], false]
184  VL_MAP_STRING_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "INT", "DOUBLE"]], true]
185  MAP_VL_STRING_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "INT", "DOUBLE"]], false]
186  MAP_VL_STRING_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "INT", "DOUBLE"]], false]
187  VL_MAP_STRING_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "INT", "DOUBLE"]], true]
188  VL_MAP_VL_STRING_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "INT", "DOUBLE"]], true]
189  VL_MAP_VL_STRING_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "INT", "DOUBLE"]], true]
190 
191  // map<string, pair<double, map<int, double> > >
192  MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], false]
193  VL_MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], true]
194  MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], false]
195  MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], false]
196  VL_MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], true]
197  VL_MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], true]
198  MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], false]
199  VL_MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE, // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], true]
200 
201  // map<map< string, double > >
202  MAP_INT_MAP_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["MAP", "STRING", "DOUBLE"]], false]
203  MAP_INT_MAP_VL_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["MAP", "VL_STRING", "DOUBLE"]], false]
204  VL_MAP_INT_MAP_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["MAP", "STRING", "DOUBLE"]], true]
205  VL_MAP_INT_MAP_VL_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["MAP", "VL_STRING", "DOUBLE"]], true]
206  MAP_INT_VL_MAP_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["VL_MAP", "STRING", "DOUBLE"]], false]
207  MAP_INT_VL_MAP_VL_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["VL_MAP", "VL_STRING", "DOUBLE"]], false]
208  VL_MAP_INT_VL_MAP_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["VL_MAP", "STRING", "DOUBLE"]], true]
209  VL_MAP_INT_VL_MAP_VL_STRING_DOUBLE, // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["VL_MAP", "VL_STRING", "DOUBLE"]], true]
210 
211  // map< string, vector< pair<int, pair<string string> > > >
212  MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
213  MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
214  MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
215  MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
216  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
217  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
218  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
219  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
220  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
221  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
222  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
223  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
224  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
225  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
226  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
227  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
228  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
229  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
230  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
231  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
232  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
233  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
234  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
235  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
236  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
237  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
238  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
239  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
240  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
241  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
242  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
243  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
244 
245  // list< pair<int, int>
246  LIST_PAIR_INT_INT, // ["std::list<std::pair<int, int>>", 2, ["SQLite"], ["LIST", ["PAIR", "INT", "INT"]], false]
247  VL_LIST_PAIR_INT_INT, // ["std::list<std::pair<int, int>>", 2, ["SQLite"], ["VL_LIST", ["PAIR", "INT", "INT"]], true]
248 
249  // map< string, pair< string, vector<double> > > >
250  MAP_STRING_PAIR_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], false]
251  MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], false]
252  MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], false]
253  MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], false]
254  MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], false]
255  MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], false]
256  MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], false]
257  MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], false]
258  VL_MAP_STRING_PAIR_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], true]
259  VL_MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], true]
260  VL_MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], true]
261  VL_MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], true]
262  VL_MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], true]
263  VL_MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], true]
264  VL_MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], true]
265  VL_MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE, // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], true]
266 
267  // map<string, map<string, int> >
268  MAP_STRING_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "STRING", "INT"]], false]
269  MAP_STRING_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "VL_STRING", "INT"]], false]
270  MAP_STRING_VL_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "STRING", "INT"]], false]
271  MAP_STRING_VL_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
272  MAP_VL_STRING_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "STRING", "INT"]], false]
273  MAP_VL_STRING_VL_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "STRING", "INT"]], false]
274  MAP_VL_STRING_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "VL_STRING", "INT"]], false]
275  MAP_VL_STRING_VL_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
276  VL_MAP_STRING_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "STRING", "INT"]], false]
277  VL_MAP_VL_STRING_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "STRING", "INT"]], false]
278  VL_MAP_STRING_VL_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "STRING", "INT"]], false]
279  VL_MAP_STRING_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "VL_STRING", "INT"]], false]
280  VL_MAP_STRING_VL_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
281  VL_MAP_VL_STRING_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "VL_STRING", "INT"]], false]
282  VL_MAP_VL_STRING_VL_MAP_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "STRING", "INT"]], false]
283  VL_MAP_VL_STRING_VL_MAP_VL_STRING_INT, // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
284 
285  // vector<pair<pair<double, double>, map<string, double>>>
286  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > >", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "STRING", "DOUBLE"]]], false]
287  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "VL_STRING", "DOUBLE"]]], false]
288  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "STRING", "DOUBLE"]]], false]
289  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "VL_STRING", "DOUBLE"]]], false]
290  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > >", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "STRING", "DOUBLE"]]], false]
291  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > ", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "VL_STRING", "DOUBLE"]]], false]
292  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > ", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "STRING", "DOUBLE"]]], false]
293  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > >", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "VL_STRING", "DOUBLE"]]], false]
294 
295  // pair<int, pair<string, string>>
296  PAIR_INT_PAIR_STRING_STRING, // ["std::pair<int, std::pair<std::string, std::string>>", 2, [], ["PAIR", "INT", ["PAIR", "STRING", "STRING"]], false]
297  PAIR_INT_PAIR_VL_STRING_STRING, // ["std::pair<int, std::pair<std::string, std::string>>", 2, [], ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]], false]
298  PAIR_INT_PAIR_STRING_VL_STRING, // ["std::pair<int, std::pair<std::string, std::string>>", 2, [], ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]], false]
299  PAIR_INT_PAIR_VL_STRING_VL_STRING, // ["std::pair<int, std::pair<std::string, std::string>>", 2, [], ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]], false]
300 
301  // pair<double, double>
302  PAIR_DOUBLE_DOUBLE, // ["std::pair<double, double>", 0, [], ["PAIR", "DOUBLE", "DOUBLE"], false]
303 
304  // pair<pair<double, double>, map<string, double>>
305  PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE, // ["std::pair<std::pair<double, double>, std::map<std::string, double>>", 4, [], ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "STRING", "DOUBLE"]], false]
306  PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE, // ["std::pair<std::pair<double, double>, std::map<std::string, double>>", 4, [], ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "VL_STRING", "DOUBLE"]], false]
307  PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE, // ["std::pair<std::pair<double, double>, std::map<std::string, double>>", 4, [], ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "STRING", "DOUBLE"]], false]
308  PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE, // ["std::pair<std::pair<double, double>, std::map<std::string, double>>", 4, [], ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "VL_STRING", "DOUBLE"]], false]
309 };
310 
311 /// Represents operation codes for condition checking.
312 enum CmpOpCode {
313  LT = 0,
314  GT,
315  LE,
316  GE,
317  EQ,
318  NE,
319 };
320 
321 /// Represents a condition used to filter rows returned by a query.
322 class Cond {
323  public:
324  Cond() {}
325 
326  Cond(std::string field, std::string op, boost::spirit::hold_any val)
327  : field(field),
328  op(op),
329  val(val) {
330  if (op == "<")
331  opcode = LT;
332  else if (op == ">")
333  opcode = GT;
334  else if (op == "<=")
335  opcode = LE;
336  else if (op == ">=")
337  opcode = GE;
338  else if (op == "==")
339  opcode = EQ;
340  else if (op == "!=")
341  opcode = NE;
342  else
343  throw ValueError("operation '" + op + "' not valid for field '" + \
344  field + "'.");
345  }
346 
347  /// table column name
348  std::string field;
349 
350  /// One of: "<", ">", "<=", ">=", "==", "!="
351  std::string op;
352 
353  /// The CmpOpCode cooresponding to op.
355 
356  /// value supported by backend(s) in use
358 };
359 
360 typedef std::vector<boost::spirit::hold_any> QueryRow;
361 
362 /// Meta data and results of a query.
363 class QueryResult {
364  public:
365  /// names of each field returned by a query
366  std::vector<std::string> fields;
367 
368  /// types of each field returned by a query.
369  std::vector<DbTypes> types;
370 
371  /// ordered results of a query
372  std::vector<QueryRow> rows;
373 
374  void Reset() {
375  fields.clear();
376  types.clear();
377  rows.clear();
378  }
379 
380  /// Convenience method for retrieving a value from a specific row and named
381  /// field (column). The caller is responsible for specifying a valid templated
382  /// type to cast to. Example use:
383  ///
384  /// @code
385  ///
386  /// QueryResult qr = ...
387  ///
388  /// for (int i = 0; i < qr.rows.size(); ++i) {
389  /// std::cout << qr.GetVal<int>("field1", i) << "\n";
390  /// std::cout << qr.GetVal<double>("field2", i) << "\n";
391  /// std::cout << qr.GetVal<std::string>("field3", i) << "\n";
392  /// }
393  ///
394  /// @endcode
395  template <class T>
396  T GetVal(std::string field, int row = 0) {
397  if (rows.empty())
398  throw StateError("No rows found during query for field " + field);
399 
400  if (row >= rows.size()) {
401  throw KeyError("index larger than number of query rows for field "
402  + field);
403  }
404 
405  int field_idx = -1;
406  for (int i = 0; i < fields.size(); ++i) {
407  if (fields[i] == field) {
408  field_idx = i;
409  break;
410  }
411  }
412  if (field_idx == -1) {
413  throw KeyError("query result has no such field " + field);
414  }
415 
416  return rows[row][field_idx].cast<T>();
417  }
418 };
419 
420 /// Interface implemented by backends that support rudimentary querying.
422  public:
423  virtual ~QueryableBackend() {}
424 
425  /// Return a set of rows from the specificed table that match all given
426  /// conditions. Conditions are AND'd together. conds may be NULL.
427  virtual QueryResult Query(std::string table, std::vector<Cond>* conds) = 0;
428 
429  /// Return a map of column names of the specified table to the associated
430  /// database type.
431  virtual std::map<std::string, DbTypes> ColumnTypes(std::string table) = 0;
432 
433  /// Return a set of all table names currently in the database.
434  virtual std::set<std::string> Tables() = 0;
435 };
436 
437 /// Interface implemented by backends that support recording and querying.
438 class FullBackend: public QueryableBackend, public RecBackend {
439  public:
440  virtual ~FullBackend() {}
441 };
442 
443 /// Wrapper class for QueryableBackends that injects a set of Cond's into every
444 /// query before being executed.
446  public:
447  CondInjector(QueryableBackend* b, std::vector<Cond> to_inject)
448  : b_(b),
449  to_inject_(to_inject) {}
450 
451  virtual QueryResult Query(std::string table, std::vector<Cond>* conds) {
452  if (conds == NULL) {
453  return b_->Query(table, &to_inject_);
454  }
455 
456  std::vector<Cond> c = *conds;
457  for (int i = 0; i < to_inject_.size(); ++i) {
458  c.push_back(to_inject_[i]);
459  }
460  return b_->Query(table, &c);
461  }
462 
463  virtual std::map<std::string, DbTypes> ColumnTypes(std::string table) {
464  return b_->ColumnTypes(table);
465  }
466 
467  virtual std::set<std::string> Tables() { return b_->Tables(); }
468 
469  private:
470  QueryableBackend* b_;
471  std::vector<Cond> to_inject_;
472 };
473 
474 /// Wrapper class for QueryableBackends that injects prefix in front of the
475 /// title/table for every query before being executed. A query to the
476 /// "MyAgentTable" table will actually be passed to the wrapped backend as
477 /// [prefix] + "MyAgentTable".
479  public:
480  PrefixInjector(QueryableBackend* b, std::string prefix)
481  : b_(b),
482  prefix_(prefix) {}
483 
484  virtual QueryResult Query(std::string table, std::vector<Cond>* conds) {
485  return b_->Query(prefix_ + table, conds);
486  }
487 
488  virtual std::map<std::string, DbTypes> ColumnTypes(std::string table) {
489  return b_->ColumnTypes(table);
490  }
491 
492  virtual std::set<std::string> Tables() { return b_->Tables(); }
493 
494  private:
495  QueryableBackend* b_;
496  std::string prefix_;
497 };
498 
499 /// Compares a condiontion for a single value
500 template <typename T>
501 inline bool CmpCond(T* x, Cond* cond) {
502  bool rtn;
503  switch (cond->opcode) {
504  case LT: {
505  rtn = (*x) < cond->val.cast<T>();
506  break;
507  }
508  case GT: {
509  rtn = (*x) > cond->val.cast<T>();
510  break;
511  }
512  case LE: {
513  rtn = (*x) <= cond->val.cast<T>();
514  break;
515  }
516  case GE: {
517  rtn = (*x) >= cond->val.cast<T>();
518  break;
519  }
520  case EQ: {
521  rtn = (*x) == cond->val.cast<T>();
522  break;
523  }
524  case NE: {
525  rtn = (*x) != cond->val.cast<T>();
526  break;
527  }
528  }
529  return rtn;
530 }
531 
532 /// Compares all condiontions for a value
533 template <typename T>
534 inline bool CmpConds(T* x, std::vector<Cond*>* conds) {
535  int i;
536  for (i = 0; i < conds->size(); ++i)
537  if (!CmpCond<T>(&(*x), (*conds)[i]))
538  return false;
539  return true;
540 }
541 
542 /// The digest type for SHA1s.
543 ///
544 /// This class is a hack around a language deficiency in C++. You cannot pass
545 /// around an array (unsinged int[5]) between function calls. You can only
546 /// pass pointers, which would involve lost of new/free and heap shenanigans
547 /// that are not needed for a dumb container. Therefore Sha1::Digest() cannot
548 /// return what would be most natural. The second most natural thing would be
549 /// a std::array<unsigned int, 5>. However, std::array is a C++11 feature and
550 /// we are not yet ready to go down that road.
551 ///
552 /// To pass an array into and out of a function it has to be inside of struct
553 /// or a class. I chose a class here since there are many member functions.
554 ///
555 /// The reason why this is public is that it needs to be directly writable
556 /// from buffers coming from HDF5. In the future, this really should just be
557 /// a std::array.
558 class Digest {
559  public:
560  unsigned int val[CYCLUS_SHA1_NINT];
561 
562  /// Casts the value of this digest to a vector of the templated type.
563  template <typename T>
564  inline std::vector<T> cast() const {
565  std::vector<T> rtn = std::vector<T>(CYCLUS_SHA1_NINT);
566  for (unsigned int i = 0; i < CYCLUS_SHA1_NINT; ++i)
567  rtn[i] = static_cast<T>(val[i]);
568  return rtn;
569  }
570 
571  // operators
572  inline std::ostream& operator<<(std::ostream& out) const {
573  return out << "[" << val[0] << ", " << val[1] << ", " << val[2] << \
574  ", " << val[3] << ", " << val[4] << "]";
575  }
576 
577  inline bool operator< (const cyclus::Digest& rhs) const {
578  bool rtn = false;
579  for (int i = 0; i < CYCLUS_SHA1_NINT; ++i) {
580  if (val[i] < rhs.val[i]) {
581  rtn = true;
582  break;
583  } else if (val[i] > rhs.val[i]) {
584  rtn = false;
585  break;
586  } // else they are equal and we need to check the next index
587  }
588  return rtn;
589  }
590 
591  inline bool operator> (const cyclus::Digest& rhs) const {
592  return !operator<(rhs) && !operator==(rhs);
593  }
594 
595  inline bool operator<=(const cyclus::Digest& rhs) const {
596  return !operator>(rhs);
597  }
598 
599  inline bool operator>=(const cyclus::Digest& rhs) const {
600  return !operator<(rhs);
601  }
602 
603  inline bool operator==(const cyclus::Digest& rhs) const {
604  bool rtn = true;
605  for (int i = 0; i < CYCLUS_SHA1_NINT; ++i) {
606  if (val[i] != rhs.val[i]) {
607  rtn = false;
608  break;
609  } // else they are equal and we need to check the next index.
610  }
611  return rtn;
612  }
613 
614  inline bool operator!=(const cyclus::Digest& rhs) const {
615  return !operator==(rhs);
616  }
617 };
618 
619 class Sha1 {
620  public:
621  Sha1() { hash_ = boost::uuids::detail::sha1(); }
622 
623  /// Clears the current hash value to its default state.
624  inline void Clear() { hash_.reset(); }
625 
626  /// Updates the hash value in-place.
627  /// \{
628  inline void Update(const std::string& s) {
629  hash_.process_bytes(s.c_str(), s.size());
630  }
631 
632  inline void Update(const Blob& b) { Update(b.str()); }
633 
634  inline void Update(const std::vector<int>& x) {
635  hash_.process_bytes(&x[0], x.size() * sizeof(int));
636  }
637 
638  inline void Update(const std::vector<float>& x) {
639  hash_.process_bytes(&x[0], x.size() * sizeof(float));
640  }
641 
642  inline void Update(const std::vector<double>& x) {
643  hash_.process_bytes(&x[0], x.size() * sizeof(double));
644  }
645 
646  inline void Update(const std::vector<std::string>& x) {
647  for (unsigned int i = 0; i < x.size(); ++i)
648  hash_.process_bytes(x[i].c_str(), x[i].size());
649  }
650 
651  inline void Update(const std::set<int>& x) {
652  std::set<int>::iterator it = x.begin();
653  for (; it != x.end(); ++it)
654  hash_.process_bytes(&(*it), sizeof(int));
655  }
656 
657  inline void Update(const std::set<std::string>& x) {
658  std::set<std::string>::iterator it = x.begin();
659  for (; it != x.end(); ++it)
660  hash_.process_bytes(it->c_str(), it->size());
661  }
662 
663  inline void Update(const std::list<int>& x) {
664  std::list<int>::const_iterator it = x.begin();
665  for (; it != x.end(); ++it)
666  hash_.process_bytes(&(*it), sizeof(int));
667  }
668 
669  inline void Update(const std::list<std::string>& x) {
670  std::list<std::string>::const_iterator it = x.begin();
671  for (; it != x.end(); ++it)
672  hash_.process_bytes(it->c_str(), it->size());
673  }
674 
675  inline void Update(const std::pair<int, int>& x) {
676  hash_.process_bytes(&(x.first), sizeof(int));
677  hash_.process_bytes(&(x.second), sizeof(int));
678  }
679 
680  inline void Update(const std::pair<int, std::string>& x) {
681  hash_.process_bytes(&(x.first), sizeof(int));
682  hash_.process_bytes(x.second.c_str(), x.second.size());
683  }
684 
685  inline void Update(const std::map<int, int>& x) {
686  std::map<int, int>::const_iterator it = x.begin();
687  for (; it != x.end(); ++it) {
688  hash_.process_bytes(&(it->first), sizeof(int));
689  hash_.process_bytes(&(it->second), sizeof(int));
690  }
691  }
692 
693  inline void Update(const std::map<int, double>& x) {
694  std::map<int, double>::const_iterator it = x.begin();
695  for (; it != x.end(); ++it) {
696  hash_.process_bytes(&(it->first), sizeof(int));
697  hash_.process_bytes(&(it->second), sizeof(double));
698  }
699  }
700 
701  inline void Update(const std::map<int, std::string>& x) {
702  std::map<int, std::string>::const_iterator it = x.begin();
703  for (; it != x.end(); ++it) {
704  hash_.process_bytes(&(it->first), sizeof(int));
705  hash_.process_bytes(it->second.c_str(), it->second.size());
706  }
707  }
708 
709  inline void Update(const std::map<std::string, int>& x) {
710  std::map<std::string, int>::const_iterator it = x.begin();
711  for (; it != x.end(); ++it) {
712  hash_.process_bytes(it->first.c_str(), it->first.size());
713  hash_.process_bytes(&(it->second), sizeof(int));
714  }
715  }
716 
717  inline void Update(const std::map<std::string, double>& x) {
718  std::map<std::string, double>::const_iterator it = x.begin();
719  for (; it != x.end(); ++it) {
720  hash_.process_bytes(it->first.c_str(), it->first.size());
721  hash_.process_bytes(&(it->second), sizeof(double));
722  }
723  }
724 
725  inline void Update(const std::map<std::string, std::string>& x) {
726  std::map<std::string, std::string>::const_iterator it = x.begin();
727  for (; it != x.end(); ++it) {
728  hash_.process_bytes(it->first.c_str(), it->first.size());
729  hash_.process_bytes(it->second.c_str(), it->second.size());
730  }
731  }
732 
733  inline void Update(const std::map<std::pair<int, std::string>, double>& x) {
734  std::map<std::pair<int, std::string>, double>::const_iterator it = x.begin();
735  for (; it != x.end(); ++it) {
736  hash_.process_bytes(&(it->first.first), sizeof(int));
737  hash_.process_bytes(it->first.second.c_str(), it->first.second.size());
738  hash_.process_bytes(&(it->second), sizeof(double));
739  }
740  }
741  /// \}
742 
744  Digest d;
745  hash_.get_digest(d.val);
746  return d;
747  }
748 
749  private:
750  boost::uuids::detail::sha1 hash_;
751 };
752 
753 } // namespace cyclus
754 
755 #endif // CYCLUS_SRC_QUERY_BACKEND_H_
T Query(InfileTree *tree, std::string query, int index=0)
a query method for required parameters
Definition: infile_tree.h:84
void Update(const std::map< std::pair< int, std::string >, double > &x)
unsigned int val[CYCLUS_SHA1_NINT]
void Update(const std::map< std::string, int > &x)
void Update(const Blob &b)
bool CmpConds(T *x, std::vector< Cond * > *conds)
Compares all condiontions for a value.
void Update(const std::map< int, double > &x)
std::string op
One of: "<", ">", "<=", ">=", "==", "!=".
void Update(const std::map< int, int > &x)
virtual QueryResult Query(std::string table, std::vector< Cond > *conds)
Return a set of rows from the specificed table that match all given conditions.
double b(int nuc)
Computes the scattering length [cm] from the coherent and incoherent components.
Definition: pyne.cc:11180
std::ostream & operator<<(std::ostream &out) const
For failed object state expectations.
Definition: error.h:53
CondInjector(QueryableBackend *b, std::vector< Cond > to_inject)
Interface implemented by backends that support recording and querying.
Meta data and results of a query.
virtual std::map< std::string, DbTypes > ColumnTypes(std::string table)
Return a map of column names of the specified table to the associated database type.
bool operator<(const CapacityConstraint< T > &lhs, const CapacityConstraint< T > &rhs)
CapacityConstraint-CapacityConstraint comparison operator, allows usage in ordered containers...
void Update(const std::vector< std::string > &x)
boost::spirit::hold_any val
value supported by backend(s) in use
std::vector< T > cast() const
Casts the value of this digest to a vector of the templated type.
For values that are too big, too small, etc.
Definition: error.h:41
void Update(const std::pair< int, int > &x)
void Update(const std::pair< int, std::string > &x)
Digest digest()
void Update(const std::map< int, std::string > &x)
DbTypes
This is the master list of all supported database types.
Definition: query_backend.h:26
#define CYCLUS_SHA1_NINT
Definition: query_backend.h:17
bool operator<=(const cyclus::Digest &rhs) const
T GetVal(std::string field, int row=0)
Convenience method for retrieving a value from a specific row and named field (column).
const std::string & str() const
Definition: blob.h:15
virtual std::map< std::string, DbTypes > ColumnTypes(std::string table)
Return a map of column names of the specified table to the associated database type.
virtual QueryResult Query(std::string table, std::vector< Cond > *conds)
Return a set of rows from the specificed table that match all given conditions.
void Update(const std::set< std::string > &x)
bool operator==(const cyclus::Digest &rhs) const
void Update(const std::set< int > &x)
The digest type for SHA1s.
void Update(const std::list< int > &x)
std::vector< boost::spirit::hold_any > QueryRow
std::vector< std::string > fields
names of each field returned by a query
CmpOpCode opcode
The CmpOpCode cooresponding to op.
Cond(std::string field, std::string op, boost::spirit::hold_any val)
Wrapper class for QueryableBackends that injects a set of Cond&#39;s into every query before being execut...
virtual std::set< std::string > Tables()
Return a set of all table names currently in the database.
std::vector< DbTypes > types
types of each field returned by a query.
An abstract base class for listeners (e.g.
Definition: rec_backend.h:16
void Update(const std::vector< double > &x)
bool operator!=(const cyclus::Digest &rhs) const
std::string field
table column name
Wrapper class for QueryableBackends that injects prefix in front of the title/table for every query b...
bool operator==(const CapacityConstraint< T > &lhs, const CapacityConstraint< T > &rhs)
CapacityConstraint-CapacityConstraint equality operator.
T const & cast() const
Definition: any.hpp:309
taken directly from OsiSolverInterface.cpp on 2/17/14 from https://projects.coin-or.org/Osi/browser/trunk.
Definition: agent.cc:14
PrefixInjector(QueryableBackend *b, std::string prefix)
A type to represent variable-length array of bytes for dumping to a cyclus output database...
Definition: blob.h:9
bool CmpCond(T *x, Cond *cond)
Compares a condiontion for a single value.
void Update(const std::vector< int > &x)
std::vector< QueryRow > rows
ordered results of a query
Represents a condition used to filter rows returned by a query.
bool operator>=(const cyclus::Digest &rhs) const
void Update(const std::vector< float > &x)
CmpOpCode
Represents operation codes for condition checking.
virtual std::set< std::string > Tables()
Return a set of all table names currently in the database.
void Update(const std::list< std::string > &x)
Interface implemented by backends that support rudimentary querying.
void Update(const std::map< std::string, std::string > &x)
void Update(const std::map< std::string, double > &x)
For failed retrieval/insertion of key-based data into/from data structures.
Definition: error.h:47
void Clear()
Clears the current hash value to its default state.
void Update(const std::string &s)
Updates the hash value in-place.