39 #include "ce_expr.tab.hh" 41 #pragma GCC diagnostic ignored "-Wsign-compare" 52 template<
class T1,
class T2>
53 bool 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.");
79 static inline unsigned long long dap_floor_zero(T i)
81 return (
unsigned long long) ((i < 0) ? 0 : i);
88 static inline T dap_floor_zero(T i)
101 template<
class UT1,
class T2>
102 bool 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.");
138 template<
class T1,
class UT2>
139 bool 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.");
169 template<
class T1,
class T2>
179 case SCAN_GREATER_EQL:
187 return r.
match(v1.c_str(), v1.length()) > 0;
190 throw Error(malformed_expr,
"Unrecognized operator.");
196 #endif // _operators_h bool Cmp(int op, T1 v1, T2 v2)
top level DAP object to house generic methods
int match(const char *s, int len, int pos=0)
Does the pattern match.
bool StrCmp(int op, T1 v1, T2 v2)
A class for error processing.