static really_inline
char PROCESS_ACCEPTS_IMPL_FN(const IMPL_NFA_T *limex, const STATE_T *s,
- STATE_T *squash, const ENG_STATE_T *squashMasks,
- const STATE_T *acceptMask,
+ STATE_T *squash, const STATE_T *acceptMask,
const struct NFAAccept *acceptTable, u64a offset,
NfaCallback callback, void *context) {
assert(s);
return 1;
}
if (squash != NULL && a->squash != MO_INVALID_IDX) {
- assert(squashMasks);
- assert(a->squash < limex->squashCount);
- const ENG_STATE_T *sq = &squashMasks[a->squash];
- DEBUG_PRINTF("squash mask %u @ %p\n", a->squash, sq);
+ DEBUG_PRINTF("applying squash mask at offset %u\n", a->squash);
+ const ENG_STATE_T *sq =
+ (const ENG_STATE_T *)((const char *)limex + a->squash);
*squash = AND_STATE(*squash, LOAD_FROM_ENG(sq));
}
}
NfaCallback callback, void *context) {
// We have squash masks we might have to apply after firing reports.
STATE_T squash = ONES_STATE;
- const ENG_STATE_T *squashMasks = (const ENG_STATE_T *)
- ((const char *)limex + limex->squashOffset);
-
- return PROCESS_ACCEPTS_IMPL_FN(limex, s, &squash, squashMasks, acceptMask,
- acceptTable, offset, callback, context);
+ return PROCESS_ACCEPTS_IMPL_FN(limex, s, &squash, acceptMask, acceptTable,
+ offset, callback, context);
*s = AND_STATE(*s, squash);
}
u64a offset, NfaCallback callback,
void *context) {
STATE_T *squash = NULL;
- const ENG_STATE_T *squashMasks = NULL;
-
- return PROCESS_ACCEPTS_IMPL_FN(limex, s, squash, squashMasks, acceptMask,
- acceptTable, offset, callback, context);
+ return PROCESS_ACCEPTS_IMPL_FN(limex, s, squash, acceptMask, acceptTable,
+ offset, callback, context);
}
// Run EOD accepts. Note that repeat_ctrl and repeat_state may be NULL if this
maskSetBits(limex->accept, acceptMask);
maskSetBits(limex->acceptAtEOD, acceptEodMask);
- // Transforms the index into the report list into an offset relative to
- // the base of the limex.
- auto report_offset_fn = [&](NFAAccept a) {
+ // Transforms the indices (report list, squash mask) into offsets
+ // relative to the base of the limex.
+ auto transform_offset_fn = [&](NFAAccept a) {
if (!a.single_report) {
a.reports = reportListOffset + a.reports * sizeof(ReportID);
}
+ a.squash = squashOffset + a.squash * sizeof(tableRow_t);
return a;
};
NFAAccept *acceptsTable = (NFAAccept *)(limex_base + acceptsOffset);
assert(ISALIGNED(acceptsTable));
transform(accepts.begin(), accepts.end(), acceptsTable,
- report_offset_fn);
+ transform_offset_fn);
// Write eod accept table.
limex->acceptEodOffset = acceptsEodOffset;
NFAAccept *acceptsEodTable = (NFAAccept *)(limex_base + acceptsEodOffset);
assert(ISALIGNED(acceptsEodTable));
transform(acceptsEod.begin(), acceptsEod.end(), acceptsEodTable,
- report_offset_fn);
+ transform_offset_fn);
// Write squash mask table.
limex->squashCount = verify_u32(squash.size());