54 HashMatchSource(
int line,
int l,
int h) : lo(l), hi(h), lineno(line) {}
55 explicit HashMatchSource(
value_t value) {
56 if (CHECKTYPE(value, tCMD)) {
57 lineno = value.lineno;
58 if (value !=
"hash_group")
59 error(value.lineno,
"Hash Match source must come from a hash group");
60 if (value.vec.size != 2)
error(value.lineno,
"Hash Match source requires a range");
61 if (CHECKTYPE(value.vec[1], tRANGE)) {
62 lo = value.vec[1].range.lo;
63 hi = value.vec[1].range.hi;
68 int get_lineno()
const override {
return lineno; }
69 int fieldlobit()
const override {
return lo < 0 ? 0 : lo; }
70 int fieldhibit()
const override {
return hi < 0 ? 0 : hi; }
71 unsigned size()
const override {
return hi >= lo && lo >= 0 ? hi - lo + 1 : 0; }
72 int slicelobit()
const override {
return fieldlobit(); }
73 int slicehibit()
const override {
return fieldhibit(); }
74 const char *name()
const override {
return "hash_group"; }
75 std::string toString()
const override {
76 std::stringstream str;
81 void dbprint(std::ostream &out)
const override {
82 out << name() <<
"(" << lo <<
".." << hi <<
")";
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:58