comparison regexParser/threadedSearch.cc @ 288:f2491681914e

special state for start search
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 01 Feb 2016 01:35:12 +0900
parents 555ca452f031
children 868f01f1ba8e
comparison
equal deleted inserted replaced
287:2f3e7bba038e 288:f2491681914e
10 return tsv; 10 return tsv;
11 } 11 }
12 12
13 static 13 static
14 TSValue stateSkip(TSValue tsv) { 14 TSValue stateSkip(TSValue tsv) {
15 tsv.current = tsv.tg->stateList->tState; 15 tsv.current = tsv.tg->stateStart->tState;
16 tsv.buff.matchBegin = tsv.buff.buffptr; 16 tsv.buff.matchBegin = tsv.buff.buffptr;
17 return tsv; 17 return tsv;
18 } 18 }
19 19
20 static 20 static
21 TSValue stateMatch(TSValue tsv) { 21 TSValue stateMatch(TSValue tsv) {
22 fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin-1,1,stdout); 22 fwrite(tsv.buff.matchBegin,tsv.buff.buffptr-tsv.buff.matchBegin-1,1,stdout);
23 puts(""); 23 puts("");
24 tsv.current = tsv.tg->stateList->tState;
25 tsv.buff.buffptr--; 24 tsv.buff.buffptr--;
26 tsv = stateSkip(tsv); 25 tsv = stateSkip(tsv);
27 return tsv; 26 return tsv;
28 } 27 }
29 28
35 while (hasNext(ccw)) { 34 while (hasNext(ccw)) {
36 getNext(ccw); 35 getNext(ccw);
37 ccvSize++; 36 ccvSize++;
38 } 37 }
39 tState->ccvSize = ccvSize; 38 tState->ccvSize = ccvSize;
40 if (state->accept) { 39 if (state->accept && state != tg->stateList ) {
41 tState->stateSkip = tg->stateMatch; 40 tState->stateSkip = tg->stateMatch;
42 tState->stateContinue = tg->stateNothing; 41 tState->stateContinue = tg->stateNothing;
43 } else { 42 } else {
44 tState->stateSkip = tg->stateSkip; 43 tState->stateSkip = tg->stateSkip;
45 tState->stateContinue = tg->stateNothing; 44 tState->stateContinue = tg->stateNothing;
121 tsv.result = NULL; 120 tsv.result = NULL;
122 tsv.tg->stateSkip = stateSkip; 121 tsv.tg->stateSkip = stateSkip;
123 tsv.tg->stateMatch = stateMatch; 122 tsv.tg->stateMatch = stateMatch;
124 tsv.tg->stateNothing = stateNothing; 123 tsv.tg->stateNothing = stateNothing;
125 tsv.current = generateTState(tg->stateList,tg); 124 tsv.current = generateTState(tg->stateList,tg);
125 tg->stateStart = NEW(State);
126 *tg->stateStart = *tg->stateList;
127 tg->stateStart->accept = false; // Start state never accept
128 generateTState(tg->stateStart,tg);
129
126 tSearch(tsv); 130 tSearch(tsv);
127 } 131 }