commit - b02bcc1b1c826553fdcd0ffe6421d1d636f4665c
commit + 26ac38bf828456a0eba1d771694936a1e25871f5
blob - 6440ec0c1349aaf39fb4f74a3a0495b6cfc7cc32
blob + e234d770822dce42ec7b7c3852d6681c71db6808
--- test_nfa.c
+++ test_nfa.c
}
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_;
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? */
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]);
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)