/home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/db/include/RAT/DBTable.hh Source File

Ratpac-two: /home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/db/include/RAT/DBTable.hh Source File
Ratpac-two
DBTable.hh
1 
10 #ifndef __RAT_DBTable__
11 #define __RAT_DBTable__
12 
13 #include <RAT/DBFieldCallback.hh>
14 #include <RAT/HashFunc.hh>
15 #include <RAT/json.hh>
16 #include <algorithm>
17 #include <hash.hpp>
18 #include <iterator>
19 #include <numeric>
20 #include <string>
21 #include <vector>
22 
23 namespace RAT {
24 
25 class DBTable {
26  public:
28  DBTable();
29 
31  DBTable(json::Value &jsonDoc);
32 
34  DBTable(std::string tblname, std::string index = "");
35 
37  ~DBTable();
38 
39  std::string GetName() const { return tblname; };
40  void SetName(std::string _tblname) { tblname = _tblname; };
41 
42  std::string GetIndex() const { return index; };
43  void SetIndex(std::string _index) { index = _index; }
44 
45  // Validity range methods
46 
48  int GetRunBegin() const { return run_begin; };
50  int GetRunEnd() const { return run_end; };
52  std::vector<int> GetValidRuns() const;
53 
55  bool IsUser() const;
57  bool IsDefault() const;
59  bool IsValidRun(const int run);
61  bool UsesRunList() const { return useRunList; };
62 
65  void SetRunRange(int _run_begin, int _run_end) {
66  run_begin = _run_begin;
67  run_end = _run_end;
68  useRunList = false;
69  }
71  void SetRunList(std::vector<int> _run_list);
73  void SetUser() { SetRunRange(-1, -1); };
75  void SetDefault() { SetRunRange(0, 0); };
76 
77  // Methods for manipulating the fields in this table
78 
80  enum FieldType {
82  INTEGER,
83  DOUBLE,
84  BOOLEAN,
85  STRING,
86  INTEGER_ARRAY,
87  DOUBLE_ARRAY,
88  BOOLEAN_ARRAY,
89  STRING_ARRAY,
90  EMPTY_ARRAY,
91  JSON
92  };
93 
98  FieldType GetFieldType(std::string name) const;
99 
102  std::vector<std::string> GetFieldList() const;
103 
111  int GetI(const std::string &name) const;
112 
120  double GetD(const std::string &name) const;
121 
129  std::string GetS(const std::string &name) const;
130 
138  bool GetZ(const std::string &name) const;
139 
147  std::vector<int> GetIArray(const std::string &name) const;
148 
156  std::vector<double> GetDArray(const std::string &name) const;
157 
165  std::vector<std::string> GetSArray(const std::string &name) const;
166 
174  std::vector<bool> GetZArray(const std::string &name) const;
175 
182  json::Value GetJSON(const std::string &name) const;
183 
184  json::Value GetCompleteJSON() { return this->table; }
185 
191  template <typename T>
192  inline T Get(const std::string &name) const;
193 
195  template <typename T>
196  inline void Set(const std::string &name, const T &value) {
197  table[name] = value;
198  }
199 
201  void SetIArrayDeferred(std::string name, DBFieldCallback *callback) { iatbl_deferred[name] = callback; };
202 
204  void SetDArrayDeferred(std::string name, DBFieldCallback *callback) { datbl_deferred[name] = callback; };
205 
206  protected:
207  std::string tblname;
208  std::string index;
209  int run_begin;
210  int run_end;
212  bool useRunList = false;
213  std::vector<int> run_list;
217 
220 
223 
226 };
227 
228 /* Specialization of the above Get<> template */
229 template <>
230 inline int DBTable::Get<int>(const std::string &name) const {
231  return GetI(name);
232 }
233 
234 template <>
235 inline double DBTable::Get<double>(const std::string &name) const {
236  return GetD(name);
237 }
238 
239 template <>
240 inline std::string DBTable::Get<std::string>(const std::string &name) const {
241  return GetS(name);
242 }
243 
244 template <>
245 inline bool RAT::DBTable::Get<bool>(const std::string &name) const {
246  return GetZ(name);
247 }
248 
249 template <>
250 inline std::vector<int> RAT::DBTable::Get<std::vector<int>>(const std::string &name) const {
251  return GetIArray(name);
252 }
253 
254 template <>
255 inline std::vector<double> RAT::DBTable::Get<std::vector<double>>(const std::string &name) const {
256  return GetDArray(name);
257 }
258 
259 template <>
260 inline std::vector<std::string> RAT::DBTable::Get<std::vector<std::string>>(const std::string &name) const {
261  return GetSArray(name);
262 }
263 
264 template <>
265 inline std::vector<bool> RAT::DBTable::Get<std::vector<bool>>(const std::string &name) const {
266  return GetZArray(name);
267 }
268 
269 template <>
270 inline json::Value RAT::DBTable::Get<json::Value>(const std::string &name) const {
271  return GetJSON(name);
272 }
273 
276  public:
283  DBNotFoundError(const std::string &_table, const std::string &_index, const std::string &_field)
284  : table(_table), index(_index), field(_field){};
285 
287  bool operator==(const DBNotFoundError &other) const {
288  return table == other.table && index == other.index && field == other.field;
289  }
290 
291  std::string table;
292  std::string index;
293  std::string field;
294 };
295 
301  public:
312  DBWrongTypeError(const std::string &_table, const std::string &_index, const std::string &_field,
313  RAT::DBTable::FieldType _requestedType, RAT::DBTable::FieldType _actualType)
314  : DBNotFoundError(_table, _index, _field), requestedType(_requestedType), actualType(_actualType){};
315 
317  bool operator==(const DBWrongTypeError &other) const {
318  return table == other.table && index == other.index && field == other.field &&
319  requestedType == other.requestedType && actualType == other.actualType;
320  }
321 
322  RAT::DBTable::FieldType requestedType;
323  RAT::DBTable::FieldType actualType;
324 };
325 
326 } // namespace RAT
327 
328 #endif
Definition: DBFieldCallback.hh:9
Definition: DBTable.hh:275
bool operator==(const DBNotFoundError &other) const
Definition: DBTable.hh:287
DBNotFoundError(const std::string &_table, const std::string &_index, const std::string &_field)
Definition: DBTable.hh:283
Definition: DBTable.hh:25
FieldType GetFieldType(std::string name) const
Definition: DBTable.cc:78
std::string index
Definition: DBTable.hh:208
std::vector< int > GetValidRuns() const
Definition: DBTable.cc:37
std::string GetS(const std::string &name) const
Definition: DBTable.cc:158
bool UsesRunList() const
Definition: DBTable.hh:61
int GetRunBegin() const
Definition: DBTable.hh:48
void SetDArrayDeferred(std::string name, DBFieldCallback *callback)
Definition: DBTable.hh:204
std::string tblname
Definition: DBTable.hh:204
void SetRunList(std::vector< int > _run_list)
Definition: DBTable.cc:68
void SetRunRange(int _run_begin, int _run_end)
Definition: DBTable.hh:65
void Set(const std::string &name, const T &value)
Definition: DBTable.hh:196
std::vector< bool > GetZArray(const std::string &name) const
Definition: DBTable.cc:228
bool useRunList
Definition: DBTable.hh:212
bool IsDefault() const
Definition: DBTable.cc:54
std::vector< std::string > GetFieldList() const
Definition: DBTable.cc:122
std::vector< int > run_list
Definition: DBTable.hh:213
int run_end
Definition: DBTable.hh:210
std::vector< std::string > GetSArray(const std::string &name) const
Definition: DBTable.cc:219
bool IsValidRun(const int run)
Definition: DBTable.cc:61
T Get(const std::string &name) const
bool GetZ(const std::string &name) const
Definition: DBTable.cc:167
~DBTable()
Definition: DBTable.cc:33
json::Value table
Definition: DBTable.hh:216
FieldType
Definition: DBTable.hh:80
@ NOTFOUND
Definition: DBTable.hh:81
stlplus::hash< std::string, RAT::DBFieldCallback *, pyhash > datbl_deferred
Definition: DBTable.hh:225
int GetI(const std::string &name) const
Definition: DBTable.cc:140
void SetIArrayDeferred(std::string name, DBFieldCallback *callback)
Definition: DBTable.hh:201
stlplus::hash< std::string, RAT::DBFieldCallback *, pyhash > iatbl_deferred
Definition: DBTable.hh:222
int run_begin
Definition: DBTable.hh:209
double GetD(const std::string &name) const
Definition: DBTable.cc:149
bool IsUser() const
Definition: DBTable.cc:47
void SetDefault()
Definition: DBTable.hh:75
std::vector< int > GetIArray(const std::string &name) const
Definition: DBTable.cc:176
int GetRunEnd() const
Definition: DBTable.hh:50
DBTable()
Definition: DBTable.cc:6
stlplus::hash< std::string, FieldType, pyhash > arrayTypeCache
Definition: DBTable.hh:219
json::Value GetJSON(const std::string &name) const
Definition: DBTable.cc:237
std::vector< double > GetDArray(const std::string &name) const
Definition: DBTable.cc:194
void SetUser()
Definition: DBTable.hh:73
Definition: DBTable.hh:300
bool operator==(const DBWrongTypeError &other) const
Definition: DBTable.hh:317
DBWrongTypeError(const std::string &_table, const std::string &_index, const std::string &_field, RAT::DBTable::FieldType _requestedType, RAT::DBTable::FieldType _actualType)
Definition: DBTable.hh:312
Definition: json.hh:59
Definition: hash.hpp:120
Definition: CCCrossSecMessenger.hh:29