commit 26ac38bf828456a0eba1d771694936a1e25871f5 from: Sven M. Hallberg date: Tue Feb 08 11:57:48 2022 UTC run benchmark without printing commit - b02bcc1b1c826553fdcd0ffe6421d1d636f4665c commit + 26ac38bf828456a0eba1d771694936a1e25871f5 blob - 6440ec0c1349aaf39fb4f74a3a0495b6cfc7cc32 blob + e234d770822dce42ec7b7c3852d6681c71db6808 --- test_nfa.c +++ test_nfa.c @@ -114,7 +114,7 @@ sub(int symbol, size_t state, const char *pos, void *e } int -out(struct range r, size_t state, const char *pos, void *env_) +out_print(struct range r, size_t state, const char *pos, void *env_) { size_t i, l; struct mind *env = env_; @@ -137,7 +137,31 @@ out(struct range r, size_t state, const char *pos, voi l = env->word - env->begword; printf("%8s[%3zu] pos %zu\t%.*s\n", "WORD", state, i - l, (int)l, env->begword); + return r.base; + } + + return -1; /* what can i do? */ +} + +int +out_bench(struct range r, size_t state, const char *pos, void *env_) +{ + struct mind *env = env_; + + assert(env->input != NULL); + assert(pos >= env->input); + + /* inward output - actions */ + assert(r.n == 1); + switch (r.base) { + case ATSIGN: + env->atsign = pos; return r.base; + case WORD: + assert(env->begword != NULL); + assert(env->begword < pos); + env->word = pos; + return r.base; } return -1; /* what can i do? */ @@ -176,7 +200,7 @@ benchmark(NFA a) size_t sz; env.input = inputs[0]; - pr = nfaprep(a, sub, out, &env); + pr = nfaprep(a, sub, out_bench, &env); /* warmup */ sz = strlen(inputs[0]); @@ -254,7 +278,7 @@ main(int argc, char **argv) inp = argv[i]; sz = strlen(inp); env.input = inp; - n = match(nfa, sub, out, &env, inp, sz); + n = match(nfa, sub, out_print, &env, inp, sz); if (n == -1) printf("no "); else if (n < sz)