39#include "ce_expr.tab.hh"
50template<
class T1,
class T2>
51bool Cmp(
int op, T1 v1, T2 v2)
53 DBGN(cerr << __PRETTY_FUNCTION__ << v1 <<
" " << op <<
" " << v2 << endl);
62 case SCAN_GREATER_EQL:
69 throw Error(malformed_expr,
"Regular expressions are supported for strings only.");
71 throw Error(malformed_expr,
"Unrecognized operator.");
76static inline unsigned long long dap_floor_zero(T i)
78 return (
unsigned long long) ((i < 0) ? 0 : i);
89template<
class UT1,
class T2>
90bool USCmp(
int op, UT1 v1, T2 v2)
92 DBGN(cerr << __PRETTY_FUNCTION__ << v1 <<
" " << op <<
" " << v2 << endl);
96 return v1 == dap_floor_zero<T2>(v2);
98 return v1 != dap_floor_zero<T2>(v2);
100 return v1 > dap_floor_zero<T2>(v2);
101 case SCAN_GREATER_EQL:
102 return v1 >= dap_floor_zero<T2>(v2);
104 return v1 < dap_floor_zero<T2>(v2);
106 return v1 <= dap_floor_zero<T2>(v2);
108 throw Error(malformed_expr,
"Regular expressions are supported for strings only.");
110 throw Error(malformed_expr,
"Unrecognized operator.");
126template<
class T1,
class UT2>
129 DBGN(cerr << __PRETTY_FUNCTION__ << v1 <<
" " << op <<
" " << v2 << endl);
133 return dap_floor_zero<T1>(v1) == v2;
135 return dap_floor_zero<T1>(v1) != v2;
137 return dap_floor_zero<T1>(v1) > v2;
138 case SCAN_GREATER_EQL:
139 return dap_floor_zero<T1>(v1) >= v2;
141 return dap_floor_zero<T1>(v1) < v2;
143 return dap_floor_zero<T1>(v1) <= v2;
145 throw Error(malformed_expr,
"Regular expressions are supported for strings only.");
147 throw Error(malformed_expr,
"Unrecognized operator.");
156template<
class T1,
class T2>
166 case SCAN_GREATER_EQL:
174 return r.
match(v1.c_str(), v1.length()) > 0;
177 throw Error(malformed_expr,
"Unrecognized operator.");
A class for error processing.
int match(const char *s, int len, int pos=0)
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)
bool USCmp(int op, UT1 v1, T2 v2)
bool SUCmp(int op, T1 v1, UT2 v2)