40 #include "ce_expr.tab.hh"
53 template<
class T1,
class T2>
54 bool Cmp(
int op, T1 v1, T2 v2)
63 case SCAN_GREATER_EQL:
70 throw Error(
"Regular expressions are supported for strings only.");
72 throw Error(
"Unrecognized operator.");
77 static inline unsigned long long dap_floor_zero(T i)
79 return (
unsigned long long) ((i < 0) ? 0 : i);
90 template<
class UT1,
class T2>
91 bool USCmp(
int op, UT1 v1, T2 v2)
95 return v1 == dap_floor_zero<T2>(v2);
97 return v1 != dap_floor_zero<T2>(v2);
99 return v1 > dap_floor_zero<T2>(v2);
100 case SCAN_GREATER_EQL:
101 return v1 >= dap_floor_zero<T2>(v2);
103 return v1 < dap_floor_zero<T2>(v2);
105 return v1 <= dap_floor_zero<T2>(v2);
107 throw Error(
"Regular expressions are supported for strings only.");
109 throw Error(
"Unrecognized operator.");
125 template<
class T1,
class UT2>
130 return dap_floor_zero<T1>(v1) == v2;
132 return dap_floor_zero<T1>(v1) != v2;
134 return dap_floor_zero<T1>(v1) > v2;
135 case SCAN_GREATER_EQL:
136 return dap_floor_zero<T1>(v1) >= v2;
138 return dap_floor_zero<T1>(v1) < v2;
140 return dap_floor_zero<T1>(v1) <= v2;
142 throw Error(
"Regular expressions are supported for strings only.");
144 throw Error(
"Unrecognized operator.");
153 template<
class T1,
class T2>
163 case SCAN_GREATER_EQL:
171 return r.match(v1.c_str(), v1.length()) > 0;
174 throw Error(
"Unrecognized operator.");
180 #endif // _operators_h