DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
query.hpp
Go to the documentation of this file.
1
10#ifndef __OKS_QUERY
11#define __OKS_QUERY
12
13#include "oks/defs.hpp"
14#include "oks/object.hpp"
15
16#include <list>
17#include <exception>
18
19#include <boost/regex.hpp>
20
21namespace dunedaq {
22namespace oks {
23
24class OksQueryExpression;
25
26
28
36{
37 public:
38
40 OksQuery(const OksClass *, const std::string &);
41 virtual ~OksQuery();
42
43 friend std::ostream& operator<<(std::ostream&, const OksQuery&);
44
45 bool search_in_subclasses() const {return p_sub_classes;}
47
50
51 bool good() const {return (p_status == 0);}
52
61
62 static const char * OR;
63 static const char * AND;
64 static const char * NOT;
65 static const char * SOME;
66 static const char * THIS_CLASS;
67 static const char * ALL_SUBCLASSES;
68 static const char * OID;
69 static const char * EQ;
70 static const char * NE;
71 static const char * RE;
72 static const char * LE;
73 static const char * GE;
74 static const char * LS;
75 static const char * GT;
76 static const char * PATH_TO;
77 static const char * DIRECT;
78 static const char * NESTED;
79
80 static bool equal_cmp(const OksData *, const OksData *);
81 static bool not_equal_cmp(const OksData *, const OksData *);
82 static bool less_or_equal_cmp(const OksData *, const OksData *);
83 static bool greater_or_equal_cmp(const OksData *, const OksData *);
84 static bool less_cmp(const OksData *, const OksData *);
85 static bool greater_cmp(const OksData *, const OksData *);
86 static bool reg_exp_cmp(const OksData *, const OksData * regexp);
87
88 typedef bool (*Comparator)(const OksData *, const OksData *);
89
90
91 private:
92
96
97 static OksQueryExpression * create_expression(const OksClass *, const std::string &);
98};
99
100
102
108 friend std::ostream& operator<<(std::ostream&, const OksQueryExpression&);
109
110 public:
111
113
115 bool CheckSyntax() const;
116 bool operator==(const class OksQueryExpression& e) const {return (this == &e);}
117
118
119 protected:
120
122
123
124 private:
125
127};
128
129
131
139{
140 friend class OksObject;
141 friend class OksQueryExpression;
142
143 public:
144
146 OksQueryExpression (OksQuery::comparator_type),
147 attribute (a),
148 value (v),
149 m_comp_f (f),
150 m_reg_exp (0)
151 {};
152
153 virtual ~OksComparator() {
154 delete value;
155 if(m_reg_exp) delete m_reg_exp;
156 }
157
158 const OksAttribute * GetAttribute() const {return attribute;}
159 void SetAttribute(const OksAttribute* a) {attribute = a;}
160
161 OksData * GetValue() {return value;}
162 void SetValue(OksData *v);
163
164 void clean_reg_exp();
165
168
169 private:
170
174 boost::regex * m_reg_exp;
175
176};
177
178
180
187{
188 friend class OksObject;
189 friend class OksQueryExpression;
190
191 public:
192
194 OksQueryExpression (OksQuery::relationship_type),
195 relationship (r),
196 checkAllObjects (b),
197 p_expression (q)
198 {};
199
201
204
207
208 bool IsCheckAllObjects() const {return checkAllObjects;}
209 void SetIsCheckAllObjects(const bool b) {checkAllObjects = b;}
210
211
212 private:
213
217
218};
219
220
222
228{
229
230 friend class OksObject;
231 friend class OksQueryExpression;
232
233 public:
234
236
237 virtual ~OksNotExpression() {delete p_expression;}
238
241
242
243 private:
244
246
247};
248
249
251
253{
254
255 friend class OksObject;
256 friend class OksClass;
257 friend class OksQueryExpression;
258
259 public:
260
261 virtual ~OksListBaseQueryExpression() {while(!p_expressions.empty()) {OksQueryExpression * qe = p_expressions.front(); p_expressions.pop_front(); delete qe;}}
262
263 const std::list<OksQueryExpression *> & expressions() const {return p_expressions;}
264 void add(OksQueryExpression *q) {p_expressions.push_back(q);}
265
266
267 protected:
268
270
271
272 private:
273
274 std::list<OksQueryExpression *> p_expressions;
275
276};
277
278
280
282{
283 public:
284
286
287 virtual ~OksAndExpression() {;}
288};
289
290
292
294{
295 public:
296
298
299 virtual ~OksOrExpression() {;}
300
301};
302
304
305
311 class bad_query_syntax : public std::exception
312 {
313
314 std::string p_what;
315
316 public:
317
318 bad_query_syntax(const std::string& what_arg) noexcept : p_what (what_arg)
319 {}
320 virtual ~bad_query_syntax() noexcept
321 {}
322
323 virtual const char * what () const noexcept
324 { return p_what.c_str ();}
325 };
326
327
334 {
335
336 friend class QueryPath;
337 friend class OksObject;
338
339 public:
340
342 const std::list<std::string>& get_rel_names() const { return p_rel_names; }
343 const QueryPathExpression * get_next() const { return p_next; }
344
345 protected:
346
348 QueryPathExpression(const std::string& expression);
349
351
353 std::list<std::string> p_rel_names;
355
356 };
357
358
359
383 {
384
385 public:
386
387 QueryPath(const OksObject * o, QueryPathExpression * qpe) : p_goal(o), p_start(qpe) { }
388 QueryPath(const std::string& query, const OksKernel&);
389 ~QueryPath() {delete p_start;}
390
392 const OksObject * get_goal_object() const { return p_goal; }
393
394 private:
395
398
399 };
400
401
402std::ostream& operator<<(std::ostream&, const oks::QueryPathExpression&);
403std::ostream& operator<<(std::ostream&, const oks::QueryPath&);
404
405} // namespace oks
406} // namespace dunedaq
407#endif
OKS query logical AND expression class.
Definition query.hpp:282
OKS attribute class.
The OKS class.
Definition class.hpp:200
OKS query expression comparator class.
Definition query.hpp:139
OksQuery::Comparator GetFunction() const
Definition query.hpp:166
boost::regex * m_reg_exp
Definition query.hpp:174
const OksAttribute * attribute
Definition query.hpp:171
void SetValue(OksData *v)
Definition query.cpp:62
const OksAttribute * GetAttribute() const
Definition query.hpp:158
void SetFunction(OksQuery::Comparator f)
Definition query.hpp:167
OksComparator(const OksAttribute *a, OksData *v, OksQuery::Comparator f)
Definition query.hpp:145
OksQuery::Comparator m_comp_f
Definition query.hpp:173
void SetAttribute(const OksAttribute *a)
Definition query.hpp:159
Provides interface to the OKS kernel.
Definition kernel.hpp:577
Abstract class describing list of OKS query expressions.
Definition query.hpp:253
std::list< OksQueryExpression * > p_expressions
Definition query.hpp:274
const std::list< OksQueryExpression * > & expressions() const
Definition query.hpp:263
void add(OksQueryExpression *q)
Definition query.hpp:264
OKS query logical NOT expression class.
Definition query.hpp:228
OksNotExpression(OksQueryExpression *q=0)
Definition query.hpp:235
void set(OksQueryExpression *q)
Definition query.hpp:240
OksQueryExpression * p_expression
Definition query.hpp:245
OksQueryExpression * get() const
Definition query.hpp:239
OksObject describes instance of OksClass.
Definition object.hpp:836
OKS query logical OR expression class.
Definition query.hpp:294
OKS query expression class.
Definition query.hpp:107
const OksQuery::QueryType p_type
Definition query.hpp:126
bool operator==(const class OksQueryExpression &e) const
Definition query.hpp:116
OksQuery::QueryType type() const
Definition query.hpp:114
friend std::ostream & operator<<(std::ostream &, const OksQueryExpression &)
Definition query.cpp:779
OksQueryExpression(OksQuery::QueryType qet=OksQuery::unknown_type)
Definition query.hpp:121
OKS query class.
Definition query.hpp:36
static const char * ALL_SUBCLASSES
Definition query.hpp:67
bool good() const
Definition query.hpp:51
static bool equal_cmp(const OksData *, const OksData *)
Definition query.cpp:51
void search_in_subclasses(bool b)
Definition query.hpp:46
static bool reg_exp_cmp(const OksData *, const OksData *regexp)
Definition query.cpp:57
static bool greater_cmp(const OksData *, const OksData *)
Definition query.cpp:56
static const char * OR
Definition query.hpp:62
bool search_in_subclasses() const
Definition query.hpp:45
static const char * RE
Definition query.hpp:71
static const char * THIS_CLASS
Definition query.hpp:66
void set(OksQueryExpression *q)
Definition query.hpp:49
static const char * OID
Definition query.hpp:68
static bool less_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:53
friend std::ostream & operator<<(std::ostream &, const OksQuery &)
Definition query.cpp:892
static bool not_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:52
static const char * GT
Definition query.hpp:75
static const char * NOT
Definition query.hpp:64
bool(*) Comparator(const OksData *, const OksData *)
Definition query.hpp:88
static const char * SOME
Definition query.hpp:65
static const char * PATH_TO
Definition query.hpp:76
OksQueryExpression * p_expression
Definition query.hpp:94
static const char * GE
Definition query.hpp:73
static const char * AND
Definition query.hpp:63
static const char * NESTED
Definition query.hpp:78
static bool greater_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:54
static const char * EQ
Definition query.hpp:69
static bool less_cmp(const OksData *, const OksData *)
Definition query.cpp:55
static const char * DIRECT
Definition query.hpp:77
static const char * LE
Definition query.hpp:72
OksQuery(bool b, OksQueryExpression *q=0)
Definition query.hpp:39
static const char * NE
Definition query.hpp:70
static OksQueryExpression * create_expression(const OksClass *, const std::string &)
Definition query.cpp:182
static const char * LS
Definition query.hpp:74
OksQueryExpression * get() const
Definition query.hpp:48
OKS query relationship expression class.
Definition query.hpp:187
OksQueryExpression * get() const
Definition query.hpp:205
void set(OksQueryExpression *q)
Definition query.hpp:206
void SetRelationship(const OksRelationship *r)
Definition query.hpp:203
const OksRelationship * GetRelationship() const
Definition query.hpp:202
void SetIsCheckAllObjects(const bool b)
Definition query.hpp:209
const OksRelationship * relationship
Definition query.hpp:214
OksRelationshipExpression(const OksRelationship *r, OksQueryExpression *q, bool b=false)
Definition query.hpp:193
OksQueryExpression * p_expression
Definition query.hpp:216
QueryPathExpression * p_next
Definition query.hpp:354
QueryPathExpression(const std::string &expression)
const QueryPathExpression * get_next() const
Definition query.hpp:343
std::list< std::string > p_rel_names
Definition query.hpp:353
const std::list< std::string > & get_rel_names() const
Definition query.hpp:342
const OksObject * get_goal_object() const
Definition query.hpp:392
const QueryPathExpression * get_start_expression() const
Definition query.hpp:391
QueryPath(const OksObject *o, QueryPathExpression *qpe)
Definition query.hpp:387
const OksObject * p_goal
Definition query.hpp:396
QueryPathExpression * p_start
Definition query.hpp:397
QueryPath(const std::string &query, const OksKernel &)
bad_query_syntax(const std::string &what_arg) noexcept
Definition query.hpp:318
virtual ~bad_query_syntax() noexcept
Definition query.hpp:320
virtual const char * what() const noexcept
Definition query.hpp:323
std::ostream & operator<<(std::ostream &s, const oks::exception &ex)
Including Qt Headers.
Definition __init__.py:1
the structure to pass common parameters to various read() methods of OksData and OksObject class
Definition object.hpp:449