limex: fold TESTEOD_REV_FN use into TESTEOD_FN

This commit is contained in:
Justin Viiret 2016-09-01 16:42:00 +10:00 committed by Matthew Barr
parent 9c99a923a1
commit 3dcfea19e0
2 changed files with 7 additions and 34 deletions

View File

@ -39,7 +39,6 @@
#define IMPL_NFA_T JOIN(struct LimExNFA, SIZE) #define IMPL_NFA_T JOIN(struct LimExNFA, SIZE)
#define TESTEOD_FN JOIN(moNfaTestEod, SIZE) #define TESTEOD_FN JOIN(moNfaTestEod, SIZE)
#define TESTEOD_REV_FN JOIN(moNfaRevTestEod, SIZE)
#define LIMEX_INACCEPT_FN JOIN(limexInAccept, SIZE) #define LIMEX_INACCEPT_FN JOIN(limexInAccept, SIZE)
#define LIMEX_INANYACCEPT_FN JOIN(limexInAnyAccept, SIZE) #define LIMEX_INANYACCEPT_FN JOIN(limexInAnyAccept, SIZE)
#define EXPIRE_ESTATE_FN JOIN(limexExpireExtendedState, SIZE) #define EXPIRE_ESTATE_FN JOIN(limexExpireExtendedState, SIZE)
@ -158,7 +157,8 @@ char PROCESS_ACCEPTS_NOSQUASH_FN(const STATE_T *s,
return 0; return 0;
} }
// Run EOD accepts. // Run EOD accepts. Note that repeat_ctrl and repeat_state may be NULL if this
// LimEx contains no repeat structures.
static really_inline static really_inline
char TESTEOD_FN(const IMPL_NFA_T *limex, const STATE_T *s, char TESTEOD_FN(const IMPL_NFA_T *limex, const STATE_T *s,
const union RepeatControl *repeat_ctrl, const union RepeatControl *repeat_ctrl,
@ -189,33 +189,6 @@ char TESTEOD_FN(const IMPL_NFA_T *limex, const STATE_T *s,
return MO_CONTINUE_MATCHING; return MO_CONTINUE_MATCHING;
} }
static really_inline
char TESTEOD_REV_FN(const IMPL_NFA_T *limex, const STATE_T *s, u64a offset,
NfaCallback callback, void *context) {
assert(limex && s);
// There may not be any EOD accepts in this NFA.
if (!limex->acceptEodCount) {
return MO_CONTINUE_MATCHING;
}
STATE_T acceptEodMask = LOAD_FROM_ENG(&limex->acceptAtEOD);
STATE_T foundAccepts = AND_STATE(*s, acceptEodMask);
assert(!limex->repeatCount);
if (unlikely(ISNONZERO_STATE(foundAccepts))) {
const struct NFAAccept *acceptEodTable = getAcceptEodTable(limex);
if (PROCESS_ACCEPTS_NOSQUASH_FN(&foundAccepts, acceptEodTable,
limex->acceptEodCount, offset, callback,
context)) {
return MO_HALT_MATCHING;
}
}
return MO_CONTINUE_MATCHING;
}
// Run accepts corresponding to current state. // Run accepts corresponding to current state.
static really_inline static really_inline
char REPORTCURRENT_FN(const IMPL_NFA_T *limex, const struct mq *q) { char REPORTCURRENT_FN(const IMPL_NFA_T *limex, const struct mq *q) {
@ -391,7 +364,6 @@ char LIMEX_INANYACCEPT_FN(const IMPL_NFA_T *limex, STATE_T state,
} }
#undef TESTEOD_FN #undef TESTEOD_FN
#undef TESTEOD_REV_FN
#undef REPORTCURRENT_FN #undef REPORTCURRENT_FN
#undef EXPIRE_ESTATE_FN #undef EXPIRE_ESTATE_FN
#undef LIMEX_INACCEPT_FN #undef LIMEX_INACCEPT_FN

View File

@ -46,7 +46,6 @@
#define IMPL_NFA_T JOIN(struct LimExNFA, SIZE) #define IMPL_NFA_T JOIN(struct LimExNFA, SIZE)
#define TESTEOD_FN JOIN(moNfaTestEod, SIZE) #define TESTEOD_FN JOIN(moNfaTestEod, SIZE)
#define TESTEOD_REV_FN JOIN(moNfaRevTestEod, SIZE)
#define INITIAL_FN JOIN(moNfaInitial, SIZE) #define INITIAL_FN JOIN(moNfaInitial, SIZE)
#define TOP_FN JOIN(moNfaTop, SIZE) #define TOP_FN JOIN(moNfaTop, SIZE)
#define TOPN_FN JOIN(moNfaTopN, SIZE) #define TOPN_FN JOIN(moNfaTopN, SIZE)
@ -927,8 +926,11 @@ char JOIN(LIMEX_API_ROOT, _B_Reverse)(const struct NFA *n, u64a offset,
REV_STREAM_FN(limex, hbuf, hlen, &ctx, offset); REV_STREAM_FN(limex, hbuf, hlen, &ctx, offset);
} }
if (offset == 0 && ISNONZERO_STATE(ctx.s)) { if (offset == 0 && limex->acceptEodCount && ISNONZERO_STATE(ctx.s)) {
TESTEOD_REV_FN(limex, &ctx.s, offset, cb, context); const union RepeatControl *repeat_ctrl = NULL;
const char *repeat_state = NULL;
TESTEOD_FN(limex, &ctx.s, repeat_ctrl, repeat_state, offset, cb,
context);
} }
// NOTE: return value is unused. // NOTE: return value is unused.
@ -991,7 +993,6 @@ enum nfa_zombie_status JOIN(LIMEX_API_ROOT, _zombie_status)(
} }
#undef TESTEOD_FN #undef TESTEOD_FN
#undef TESTEOD_REV_FN
#undef INITIAL_FN #undef INITIAL_FN
#undef TOP_FN #undef TOP_FN
#undef TOPN_FN #undef TOPN_FN