mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-11-19 02:30:35 +03:00
allow some prefixes that may squash the literal match to run eagerly
This commit is contained in:
@@ -850,7 +850,7 @@ char nfaExecMcClellan8_reportCurrent(const struct NFA *n, struct mq *q) {
|
||||
}
|
||||
|
||||
char nfaExecMcClellan16_reportCurrent(const struct NFA *n, struct mq *q) {
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
NfaCallback cb = q->cb;
|
||||
void *ctxt = q->context;
|
||||
u16 s = *(u16 *)q->state;
|
||||
@@ -905,7 +905,7 @@ char nfaExecMcClellan8_inAccept(const struct NFA *n, ReportID report,
|
||||
struct mq *q) {
|
||||
assert(n && q);
|
||||
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
u8 s = *(u8 *)q->state;
|
||||
DEBUG_PRINTF("checking accepts for %hhu\n", s);
|
||||
if (s < m->accept_limit_8) {
|
||||
@@ -915,25 +915,45 @@ char nfaExecMcClellan8_inAccept(const struct NFA *n, ReportID report,
|
||||
return mcclellanHasAccept(m, get_aux(m, s), report);
|
||||
}
|
||||
|
||||
char nfaExecMcClellan8_inAnyAccept(const struct NFA *n, struct mq *q) {
|
||||
assert(n && q);
|
||||
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
u8 s = *(u8 *)q->state;
|
||||
DEBUG_PRINTF("checking accepts for %hhu\n", s);
|
||||
assert(s < m->accept_limit_8 || get_aux(m, s)->accept);
|
||||
|
||||
return s >= m->accept_limit_8;
|
||||
}
|
||||
|
||||
char nfaExecMcClellan16_inAccept(const struct NFA *n, ReportID report,
|
||||
struct mq *q) {
|
||||
assert(n && q);
|
||||
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
u16 s = *(u16 *)q->state;
|
||||
DEBUG_PRINTF("checking accepts for %hu\n", s);
|
||||
|
||||
return mcclellanHasAccept(m, get_aux(m, s), report);
|
||||
}
|
||||
|
||||
char nfaExecMcClellan16_inAnyAccept(const struct NFA *n, struct mq *q) {
|
||||
assert(n && q);
|
||||
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
u16 s = *(u16 *)q->state;
|
||||
DEBUG_PRINTF("checking accepts for %hu\n", s);
|
||||
|
||||
return !!get_aux(m, s)->accept;
|
||||
}
|
||||
|
||||
char nfaExecMcClellan8_Q2(const struct NFA *n, struct mq *q, s64a end) {
|
||||
u64a offset = q->offset;
|
||||
const u8 *buffer = q->buffer;
|
||||
NfaCallback cb = q->cb;
|
||||
void *context = q->context;
|
||||
assert(n->type == MCCLELLAN_NFA_8);
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
const u8 *hend = q->history + q->hlength;
|
||||
|
||||
return nfaExecMcClellan8_Q2i(n, offset, buffer, hend, cb, context, q,
|
||||
@@ -947,7 +967,7 @@ char nfaExecMcClellan16_Q2(const struct NFA *n, struct mq *q, s64a end) {
|
||||
NfaCallback cb = q->cb;
|
||||
void *context = q->context;
|
||||
assert(n->type == MCCLELLAN_NFA_16);
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
const u8 *hend = q->history + q->hlength;
|
||||
|
||||
return nfaExecMcClellan16_Q2i(n, offset, buffer, hend, cb, context, q,
|
||||
@@ -961,7 +981,7 @@ char nfaExecMcClellan8_QR(const struct NFA *n, struct mq *q, ReportID report) {
|
||||
NfaCallback cb = q->cb;
|
||||
void *context = q->context;
|
||||
assert(n->type == MCCLELLAN_NFA_8);
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
const u8 *hend = q->history + q->hlength;
|
||||
|
||||
char rv = nfaExecMcClellan8_Q2i(n, offset, buffer, hend, cb, context, q,
|
||||
@@ -980,7 +1000,7 @@ char nfaExecMcClellan16_QR(const struct NFA *n, struct mq *q, ReportID report) {
|
||||
NfaCallback cb = q->cb;
|
||||
void *context = q->context;
|
||||
assert(n->type == MCCLELLAN_NFA_16);
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(n);
|
||||
const struct mcclellan *m = getImplNfa(n);
|
||||
const u8 *hend = q->history + q->hlength;
|
||||
|
||||
char rv = nfaExecMcClellan16_Q2i(n, offset, buffer, hend, cb, context, q,
|
||||
@@ -996,7 +1016,7 @@ char nfaExecMcClellan16_QR(const struct NFA *n, struct mq *q, ReportID report) {
|
||||
|
||||
char nfaExecMcClellan8_initCompressedState(const struct NFA *nfa, u64a offset,
|
||||
void *state, UNUSED u8 key) {
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(nfa);
|
||||
const struct mcclellan *m = getImplNfa(nfa);
|
||||
u8 s = offset ? m->start_floating : m->start_anchored;
|
||||
if (s) {
|
||||
*(u8 *)state = s;
|
||||
@@ -1007,7 +1027,7 @@ char nfaExecMcClellan8_initCompressedState(const struct NFA *nfa, u64a offset,
|
||||
|
||||
char nfaExecMcClellan16_initCompressedState(const struct NFA *nfa, u64a offset,
|
||||
void *state, UNUSED u8 key) {
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(nfa);
|
||||
const struct mcclellan *m = getImplNfa(nfa);
|
||||
u16 s = offset ? m->start_floating : m->start_anchored;
|
||||
if (s) {
|
||||
unaligned_store_u16(state, s);
|
||||
@@ -1019,7 +1039,7 @@ char nfaExecMcClellan16_initCompressedState(const struct NFA *nfa, u64a offset,
|
||||
void nfaExecMcClellan8_SimpStream(const struct NFA *nfa, char *state,
|
||||
const u8 *buf, char top, size_t start_off,
|
||||
size_t len, NfaCallback cb, void *ctxt) {
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(nfa);
|
||||
const struct mcclellan *m = getImplNfa(nfa);
|
||||
|
||||
u8 s = top ? m->start_anchored : *(u8 *)state;
|
||||
|
||||
@@ -1037,7 +1057,7 @@ void nfaExecMcClellan8_SimpStream(const struct NFA *nfa, char *state,
|
||||
void nfaExecMcClellan16_SimpStream(const struct NFA *nfa, char *state,
|
||||
const u8 *buf, char top, size_t start_off,
|
||||
size_t len, NfaCallback cb, void *ctxt) {
|
||||
const struct mcclellan *m = (const struct mcclellan *)getImplNfa(nfa);
|
||||
const struct mcclellan *m = getImplNfa(nfa);
|
||||
|
||||
u16 s = top ? m->start_anchored : unaligned_load_u16(state);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user