# HG changeset patch # User Masataka Kohagura # Date 1454156345 -32400 # Node ID 99d635926ef3bc48ada1ecd51b855e0462cf366b # Parent 7b4bcc7b5ae6ff20f9d329a675ce2e0af7ea4cf5 ceriumCreateAnyState implemented diff -r 7b4bcc7b5ae6 -r 99d635926ef3 regexParser/cerium/CeriumMain.cc --- a/regexParser/cerium/CeriumMain.cc Sat Jan 30 20:44:37 2016 +0900 +++ b/regexParser/cerium/CeriumMain.cc Sat Jan 30 21:19:05 2016 +0900 @@ -21,6 +21,41 @@ return tv.tv_sec + (double)tv.tv_usec*1e-6; } +static +TSValue stateNothing(TSValue tsv) { + return tsv; +} + +static +TSValue stateSkip(TSValue tsv) { + tsv.buff.matchBegin = tsv.buff.buffptr; + return tsv; +} + +static +TSValue stateMatch(TSValue tsv) { + ResultPtr r = NEW(Result); + r->begin = tsv.buff.matchBegin; + r->end = tsv.buff.buffptr; + *tsv.resultEnd = r; + r->next = NULL; + tsv.resultEnd = &r->next; + tsv.current = tsv.tg->stateList->tState; + tsv.buff.buffptr--; + tsv = stateSkip(tsv); + return tsv; +} + +void ceriumCreateAnyState(TransitionGeneratorPtr tg) { + tg->stateSkip = stateSkip; + tg->stateMatch = stateMatch; + tg->stateNothing = stateNothing; + createAnyState(tg); + generateTState(tg->anyState,tg); + // generateTState for startState. It is used in stateMatch. + generateTState(tg->stateList,tg); +} + int TMmain(TaskManager *manager, int argc, char *argv[]) { @@ -28,10 +63,7 @@ st_time = getTime(); Search s = grep(argc,argv,true); - createAnyState(s.tg); - generateTState(s.tg->anyState,s.tg); - // generateTState for startState. It is used in stateMatch. - generateTState(s.tg->stateList,s.tg); + ceriumCreateAnyState(s.tg); FileMapReduce *fmp = new FileMapReduce(manager,TASK_EXEC,TASK_EXEC_DATA_PARALLEL,TASK_PRINT); filename = fmp->init(argc, argv); diff -r 7b4bcc7b5ae6 -r 99d635926ef3 regexParser/cerium/ppe/Exec.cc --- a/regexParser/cerium/ppe/Exec.cc Sat Jan 30 20:44:37 2016 +0900 +++ b/regexParser/cerium/ppe/Exec.cc Sat Jan 30 21:19:05 2016 +0900 @@ -9,43 +9,13 @@ /* これは必須 */ SchedDefineTask1(Exec,blockedGrep); -static -TSValue stateNothing(TSValue tsv) { - return tsv; -} - -static -TSValue stateSkip(TSValue tsv) { - tsv.buff.matchBegin = tsv.buff.buffptr; - return tsv; -} - -static -TSValue stateMatch(TSValue tsv) { - ResultPtr r = NEW(Result); - r->begin = tsv.buff.matchBegin; - r->end = tsv.buff.buffptr; - *tsv.resultEnd = r; - r->next = NULL; - tsv.resultEnd = &r->next; - tsv.current = tsv.tg->stateList->tState; - tsv.buff.buffptr--; - tsv = stateSkip(tsv); - return tsv; -} - TSValue blockSearch(TransitionGeneratorPtr tg,Buffer buff) { TSValue tsv; tsv.buff = buff; tsv.tg = tg; + tsv.current = tg->anyState->tState; tsv.result = NULL; tsv.resultEnd = &tsv.result; - tsv.current = tg->anyState->tState; - tsv.current->stateSkip = stateSkip; - tsv.current->stateContinue = stateNothing; - tsv.tg->stateSkip = stateSkip; - tsv.tg->stateMatch = stateMatch; - tsv.tg->stateNothing = stateNothing; unsigned char *end = buff.buffend; buff.buffend = buff.buff+1; tSearch(tsv); diff -r 7b4bcc7b5ae6 -r 99d635926ef3 regexParser/subsetConstruction.h --- a/regexParser/subsetConstruction.h Sat Jan 30 20:44:37 2016 +0900 +++ b/regexParser/subsetConstruction.h Sat Jan 30 21:19:05 2016 +0900 @@ -10,6 +10,7 @@ extern bool hasNext(CharClassWalkerPtr walk); extern CharClassWalkerPtr createCharClassWalker (CharClassPtr next); extern void printState(TransitionGeneratorPtr tg); +extern void printState(StatePtr state); extern void determinize(StatePtr s, TransitionGeneratorPtr tg); extern void subsetConstruction(TransitionGeneratorPtr tg); extern void createAnyState(TransitionGeneratorPtr tg); diff -r 7b4bcc7b5ae6 -r 99d635926ef3 regexParser/threadedSearch.cc --- a/regexParser/threadedSearch.cc Sat Jan 30 20:44:37 2016 +0900 +++ b/regexParser/threadedSearch.cc Sat Jan 30 21:19:05 2016 +0900 @@ -85,6 +85,7 @@ void tSearch(TSValue tsv) { next: while (tsv.buff.buffptr < tsv.buff.buffend) { unsigned char c = *tsv.buff.buffptr++; + // printState(tsv.current->state); for (int i = 0; i < tsv.current->ccvSize; i++) { CCVPtr ccv = &tsv.current->ccv[i]; if (cbegin) {