# HG changeset patch # User mir3636 # Date 1462717874 -32400 # Node ID da02a7258d5416fcc8f3f2529828ce45e7230992 # Parent 7b8234c090f77b288e2f7fdd078faf15e1f1815b fix diff -r 7b8234c090f7 -r da02a7258d54 regexParser/bmSearch.cc --- a/regexParser/bmSearch.cc Sun May 08 22:53:20 2016 +0900 +++ b/regexParser/bmSearch.cc Sun May 08 23:31:14 2016 +0900 @@ -1,4 +1,6 @@ -#include "regexPaser.h" +#include + +#include "regexParser.h" #include "CharClass.h" /** @@ -19,13 +21,13 @@ } } -void checkBMSearch(CharaClassPtr cc) { +void checkBMSearch(CharClassPtr cc) { // first check there is no Chareclass range - CharClassWalkerPtr cw = createCharClassWalker(st->cc); + CharClassWalkerPtr cw = createCharClassWalker(cc); while (hasNext(cw)) { - CharClassPtr cc = getNext(cw); - if (cc->cond.w.word == NULL) { + CharClassPtr cc1 = getNext(cw); + if (cc1->cond.w.word == NULL) { free(cw); return; } @@ -33,15 +35,15 @@ free(cw); // make skip table for each word - cw = createCharClassWalker(st->cc); + cw = createCharClassWalker(cc); while (hasNext(cw)) { - CharClassPtr cc = getNext(cw); - if (cc->cond.w.word) { - WordPtr w = &cc->cond.w; + CharClassPtr cc1 = getNext(cw); + if (cc1->cond.w.word) { + WordPtr w = &cc1->cond.w; while (w) { BMPtr bm = NEW(BM); - cc->cond.w.bm = bm; - create_BMskiptable(bm,cc->cond.w.word,cc->cond.length); + cc1->cond.w.bm = bm; + create_BMskiptable(bm,cc1->cond.w.word,cc1->cond.w.length); w = w->next; } } diff -r 7b8234c090f7 -r da02a7258d54 regexParser/bmSearch.h --- a/regexParser/bmSearch.h Sun May 08 22:53:20 2016 +0900 +++ b/regexParser/bmSearch.h Sun May 08 23:31:14 2016 +0900 @@ -1,1 +1,1 @@ -extern void checkBMSearch(CharaClassPtr cc); +extern void checkBMSearch(CharClassPtr cc); diff -r 7b8234c090f7 -r da02a7258d54 regexParser/threadedSearch.cc --- a/regexParser/threadedSearch.cc Sun May 08 22:53:20 2016 +0900 +++ b/regexParser/threadedSearch.cc Sun May 08 23:31:14 2016 +0900 @@ -7,6 +7,11 @@ #include "threadedSearch.h" #include "subsetConstruction.h" +#define max(a,b)((a)>(b)?a:b) +#define min(a,b)((a)<(b)?a:b) + +TStatePtr nextTState(BitVector bi,TransitionGeneratorPtr tg); + static TSValue stateNothing(TSValue tsv) { return tsv; @@ -25,9 +30,9 @@ long skip = tsv.tg->maxWordLen; for (int k = 0; k < tsv.current->ccvSize; k++) { CCVPtr ccv = &tsv.current->ccv[k]; - if (ccv.w.word) { - int i = ccv.w.length - 1; - while (tsv.buff.buffptr[i] == ccv.w.word[i]) { + if (ccv->w.word) { + int i = ccv->w.length - 1; + while (tsv.buff.buffptr[i] == ccv->w.word[i]) { if (i == 0) { if (ccv->tState) { tsv.current = ccv->tState; @@ -35,12 +40,12 @@ tsv.current = nextTState(ccv->state,tsv.tg); ccv->tState = tsv.current; } - tsv.buff.buffptr += ccv.w.length - 1; + tsv.buff.buffptr += ccv->w.length - 1; return tsv; } --i; } - skip = min(skip,max(ccv.w.bm->skip[tsv.buff.buffptr[i]],ccv.w.length - i)); + skip = min(skip,max(ccv->w.bm->skip_table[tsv.buff.buffptr[i]],ccv->w.length - i)); } } tsv.buff.buffptr += skip;