diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2014-05-06 07:23:03 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-05-06 07:41:43 -0700 |
commit | cd493ae8c13fb0380ca8b17d00429a901a885dc7 (patch) | |
tree | 43d2bf36aafd43c00d3ff48706fa7c678fc9f195 | |
parent | 03907a3edcb005a03872b23159f207af88574f06 (diff) | |
download | grep-cd493ae8c13fb0380ca8b17d00429a901a885dc7.tar.gz |
dfa: minor performance improvement for previous change
* src/dfa.c (struct dfa): New member 'fast'. Remove 'has_backref'.
All uses changed.
-rw-r--r-- | src/dfa.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -337,7 +337,7 @@ struct dfa size_t nleaves; /* Number of leaves on the parse tree. */ size_t nregexps; /* Count of parallel regexps being built with dfaparse. */ - bool has_backref; /* True if has BACKREF in tokens. */ + bool fast; /* The DFA is fast. */ bool multibyte; /* True iff MB_CUR_MAX > 1. */ token utf8_anychar_classes[5]; /* To lower ANYCHAR in UTF-8 locales. */ mbstate_t mbs; /* Multibyte conversion state. */ @@ -1595,7 +1595,7 @@ addtok_mb (token t, int mbprop) break; case BACKREF: - dfa->has_backref = true; + dfa->fast = false; default: ++dfa->nleaves; case EMPTY: @@ -3422,7 +3422,7 @@ dfasuperset (struct dfa const *d) bool dfaisfast (struct dfa const *d) { - return d->superset || (!d->multibyte && !d->has_backref); + return d->fast; } static void @@ -3462,6 +3462,7 @@ dfainit (struct dfa *d) { memset (d, 0, sizeof *d); d->multibyte = MB_CUR_MAX > 1; + d->fast = !d->multibyte; } static void @@ -3579,7 +3580,10 @@ dfacomp (char const *s, size_t len, struct dfa *d, int searchflag) dfassbuild (d); dfaanalyze (d, searchflag); if (d->superset) - dfaanalyze (d->superset, searchflag); + { + d->fast = true; + dfaanalyze (d->superset, searchflag); + } } /* Free the storage held by the components of a dfa. */ |