39 #include "ce_expr.tab.hh"
50 template<
class T1,
class T2>
51 bool 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.");
76 static inline unsigned long long dap_floor_zero(T i)
78 return (
unsigned long long) ((i < 0) ? 0 : i);
89 template<
class UT1,
class T2>
90 bool 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.");
126 template<
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.");
156 template<
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.");
183 #endif // _operators_h
bool Cmp(int op, T1 v1, T2 v2)
int match(const char *s, int len, int pos=0)
Does the pattern match.
bool USCmp(int op, UT1 v1, T2 v2)
bool StrCmp(int op, T1 v1, T2 v2)
bool SUCmp(int op, T1 v1, UT2 v2)
A class for error processing.