Mercurial > hg > Applications > Grep
diff regexParser/cerium/CeriumMain.cc @ 278:99d635926ef3
ceriumCreateAnyState implemented
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 30 Jan 2016 21:19:05 +0900 |
parents | 7b4bcc7b5ae6 |
children | 6cc1d9779f45 |
line wrap: on
line diff
--- 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);