Mercurial > hg > Applications > Grep
annotate regexParser/cerium/CeriumMain.cc @ 303:cc770cd8d000
parallel retrying seach worked
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Feb 2016 11:56:13 +0900 |
parents | 27414e6fb33c |
children |
rev | line source |
---|---|
266 | 1 #include <stdio.h> |
2 #include <sys/time.h> | |
3 #include "TaskManager.h" | |
4 #include "SchedTask.h" | |
5 #include "Func.h" | |
6 #include "FileMapReduce.h" | |
7 #include "CeriumGrep.h" | |
272 | 8 #include "subsetConstruction.h" |
9 #include "threadedSearch.h" | |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
10 #include "CeriumMain.h" |
266 | 11 |
12 extern void task_init(); | |
13 void TMend(TaskManager *); | |
14 static double st_time; | |
15 static double ed_time; | |
16 const char* usr_help_str = ""; | |
17 | |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
18 void exportState(TransitionGeneratorPtr tg) { |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
19 } |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
20 |
266 | 21 static double |
22 getTime() { | |
23 struct timeval tv; | |
24 gettimeofday(&tv, NULL); | |
25 return tv.tv_sec + (double)tv.tv_usec*1e-6; | |
26 } | |
27 | |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
28 void addResult(TSValue tsv,bool cont, unsigned char *begin, unsigned char *end) { |
303
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
29 ResultPtr r = NEW(Result); |
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
30 r->continued = cont; |
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
31 r->begin = begin; |
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
32 r->end = end; |
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
33 *tsv.blk->resultEnd = r; |
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
34 r->next = NULL; |
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
35 tsv.blk->resultEnd = &r->next; |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
36 } |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
37 |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
38 |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
39 static |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
40 TSValue stateNothing(TSValue tsv) { |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
41 return tsv; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
42 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
43 |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
44 static |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
45 TSValue stateSkip(TSValue tsv) { |
288
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
46 tsv.current = tsv.tg->stateStart->tState; |
292 | 47 if (tsv.matchEnd) { |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
298
diff
changeset
|
48 addResult(tsv,false,tsv.matchBegin,tsv.matchEnd); |
303
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
49 tsv.matchEnd = NULL; |
292 | 50 } |
298 | 51 tsv.matchBegin = tsv.buff.buffptr; // next char may be matchBegin |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
52 return tsv; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
53 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
54 |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
55 static |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
56 TSValue stateMatch(TSValue tsv) { |
292 | 57 tsv.matchEnd = tsv.buff.buffptr; // next char of the match |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
58 return tsv; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
59 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
60 |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
61 ResultPtr resultPrint(ResultPtr r,const char* comment) { |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
62 ResultPtr prev = NULL; |
280
6bbd1cbf90d0
fix prev initialize in Print.c . Search in a block worked
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
63 // printf("%s\n",comment); |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
64 for (;r;r = r->next) { |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
280
diff
changeset
|
65 if (r->continued) { |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
66 prev = r; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
67 break; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
68 } |
292 | 69 fwrite(r->begin,r->end - r->begin,1,stdout); |
280
6bbd1cbf90d0
fix prev initialize in Print.c . Search in a block worked
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
70 puts(""); |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
71 } |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
72 return prev; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
73 } |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
74 |
288
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
75 void |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
76 ceriumCreateAnyState(TransitionGeneratorPtr tg) { |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
77 tg->stateSkip = stateSkip; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
78 tg->stateMatch = stateMatch; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
79 tg->stateNothing = stateNothing; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
80 createAnyState(tg); |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
81 generateTState(tg->anyState,tg); |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
82 // generateTState for startState. It is used in stateMatch. |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
83 generateTState(tg->stateList,tg); |
288
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
84 tg->stateStart = NEW(State); |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
85 *tg->stateStart = *tg->stateList; |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
86 tg->stateStart->accept = false; // Start state never accept |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
87 generateTState(tg->stateStart,tg); |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
88 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
89 |
266 | 90 int |
91 TMmain(TaskManager *manager, int argc, char *argv[]) | |
92 { | |
93 char *filename = 0; | |
271
6640b0d5bf13
remove anystate processing in sequential seqrch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
268
diff
changeset
|
94 st_time = getTime(); |
266 | 95 Search s = grep(argc,argv,true); |
277
7b4bcc7b5ae6
nextTState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
96 |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
97 ceriumCreateAnyState(s.tg); |
268
0e423d9f9647
remove error (remain 1 warning(no use variable))
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
266
diff
changeset
|
98 |
266 | 99 FileMapReduce *fmp = new FileMapReduce(manager,TASK_EXEC,TASK_EXEC_DATA_PARALLEL,TASK_PRINT); |
100 filename = fmp->init(argc, argv); | |
101 fmp->w->global = (void*)s.tg; | |
102 if (filename < 0) { | |
103 return -1; | |
104 } | |
105 fmp->division_out_size = sizeof(void*)*3; // *Result,*blockBegin,*blockEnd | |
106 task_init(); | |
107 fmp->run_start(manager, filename); | |
108 manager->set_TMend(TMend); | |
109 return 0; | |
110 } | |
111 | |
112 void | |
113 TMend(TaskManager *manager) | |
114 { | |
115 ed_time = getTime(); | |
116 printf("Time: %0.6f\n",ed_time-st_time); | |
117 } | |
118 | |
119 /* end */ |