annotate regexParser/threadedSearch.cc @ 254:21b9ba76f91b

remove warning
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sun, 24 Jan 2016 21:10:12 +0900
parents 2b276fdd99bd
children ebb429c2b6a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
247
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
1 #include <stdio.h>
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
2 #include <stdlib.h>
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
3
246
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 245
diff changeset
4 #include "regexParser.h"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 245
diff changeset
5 #include "subsetConstruction.h"
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 245
diff changeset
6
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 void stateSkip(TSValue tsv) {
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 tsv.buff.matchBegin = tsv.buff.buffptr;
246
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 245
diff changeset
9 tsv.current->stateSkip(tsv);
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 }
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
251
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 248
diff changeset
12 TStatePtr generateTState(StatePtr state) {
247
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
13 TStatePtr tState = NEW(TState);
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
14 int ccvSize = 0;
251
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 248
diff changeset
15 CharClassWalkerPtr ccw = createCharClassWalker(state->cc);
247
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
16 while (hasNext(ccw)) {
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
17 ccvSize++;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
18 }
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
19 if (ccvSize == 0) return tState;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
20 else tState->ccv = (ccv*)malloc(sizeof(ccv)*ccvSize);
251
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 248
diff changeset
21 ccw = createCharClassWalker(state->cc);
247
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
22 int i = 0;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
23 while (hasNext(ccw)) {
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
24 CharClassPtr cc = getNext(ccw);
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
25 unsigned long begin = cc->cond.range.begin;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
26 unsigned long end = cc->cond.range.end;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
27 struct ccv *ccv = &tState->ccv[i++];
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
28 ccv->begin = begin;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
29 ccv->end = end;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
30 ccv->tState = NULL;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
31 ccv->state = cc->nextState;
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
32 ccv->w = cc->cond.w;
247
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
33 }
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
34 free(ccw);
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
35 return tState;
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
36 }
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
37
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 void tSearch(TSValue tsv) {
247
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
39 next: while (tsv.buff.buffptr < tsv.buff.buffend) {
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 246
diff changeset
40 unsigned char c = *tsv.buff.buffptr++;
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 for (int i = 0; i < tsv.current->ccvSize; i++) {
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
42 CCVPtr ccv = &tsv.current->ccv[i];
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
43 if (c<ccv->begin) tsv.current->stateSkip(tsv);
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
44 else if (c<=ccv->end) {
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
45 // range matched.
251
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 248
diff changeset
46 if (ccv->w.word) {
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
47 // match the word.
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
48 // if (not match) continue;
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
49 }
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
50 TStatePtr current = ccv->tState;
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 if (current == NULL) {
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
52 // create tSearch in next state.
251
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 248
diff changeset
53 StatePtr state = tsv.tg->stateArray[ccv->state.bitContainer];
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
54 if (state == NULL) {
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
55 // on the fly subset construction.
252
2b276fdd99bd remove error (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
56 state = createState(tsv.tg,state->bitState);
2b276fdd99bd remove error (not working)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
57 tsv.tg->stateArray[state->bitState.bitContainer] = state;
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
58 determinize(state,tsv.tg);
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
59 }
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
60 if (state->tState == NULL) {
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
61 current = generateTState(state);
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
62 ccv->tState = current;
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
63 } else {
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
64 ccv->tState = state->tState;
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
65 }
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
248
2b1fbfb92d54 implement tSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 247
diff changeset
67 tsv.current = ccv->tState;
245
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 goto next;
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 }
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 }
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 tsv.current->stateSkip(tsv);
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 }
d34de5edaa96 add threadedSearch.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 }