40#include "ce_expr.tab.hh"
42#pragma GCC diagnostic ignored "-Wsign-compare"
52template<
class T1,
class T2>
53bool Cmp(
int op, T1 v1, T2 v2)
55 DBGN(cerr << __PRETTY_FUNCTION__ << v1 <<
" " << op <<
" " << v2 << endl);
64 case SCAN_GREATER_EQL:
71 throw Error(malformed_expr,
"Regular expressions are supported for strings only.");
73 throw Error(malformed_expr,
"Unrecognized operator.");
79static inline unsigned long long dap_floor_zero(T i)
81 return (
unsigned long long) ((i < 0) ? 0 : i);
88static inline T dap_floor_zero(T i)
101template<
class UT1,
class T2>
102bool USCmp(
int op, UT1 v1, T2 v2)
104 DBGN(cerr << __PRETTY_FUNCTION__ << v1 <<
" " << op <<
" " << v2 << endl);
108 return v1 == dap_floor_zero<T2>(v2);
110 return v1 != dap_floor_zero<T2>(v2);
112 return v1 > dap_floor_zero<T2>(v2);
113 case SCAN_GREATER_EQL:
114 return v1 >= dap_floor_zero<T2>(v2);
116 return v1 < dap_floor_zero<T2>(v2);
118 return v1 <= dap_floor_zero<T2>(v2);
120 throw Error(malformed_expr,
"Regular expressions are supported for strings only.");
122 throw Error(malformed_expr,
"Unrecognized operator.");
138template<
class T1,
class UT2>
139bool SUCmp(
int op, T1 v1, UT2 v2)
141 DBGN(cerr << __PRETTY_FUNCTION__ << v1 <<
" " << op <<
" " << v2 << endl);
145 return dap_floor_zero<T1>(v1) == v2;
147 return dap_floor_zero<T1>(v1) != v2;
149 return dap_floor_zero<T1>(v1) > v2;
150 case SCAN_GREATER_EQL:
151 return dap_floor_zero<T1>(v1) >= v2;
153 return dap_floor_zero<T1>(v1) < v2;
155 return dap_floor_zero<T1>(v1) <= v2;
157 throw Error(malformed_expr,
"Regular expressions are supported for strings only.");
159 throw Error(malformed_expr,
"Unrecognized operator.");
168template<
class T1,
class T2>
178 case SCAN_GREATER_EQL:
186 return r.
match(v1.c_str(), v1.length()) > 0;
189 throw Error(malformed_expr,
"Unrecognized operator.");
A class for error processing.
Regular expression matching.
int match(const char *s, int len, int pos=0) const
Does the pattern match.
top level DAP object to house generic methods
bool StrCmp(int op, T1 v1, T2 v2)
bool Cmp(int op, T1 v1, T2 v2)