Mercurial > hg > Applications > Grep
annotate regexParser/cerium/CeriumMain.cc @ 298:63213964502a
refactoring ....
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 03 Feb 2016 12:24:34 +0900 |
parents | 948428caf616 |
children | 27414e6fb33c |
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 | |
18 static double | |
19 getTime() { | |
20 struct timeval tv; | |
21 gettimeofday(&tv, NULL); | |
22 return tv.tv_sec + (double)tv.tv_usec*1e-6; | |
23 } | |
24 | |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
25 static |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
26 TSValue stateNothing(TSValue tsv) { |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
27 return tsv; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
28 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
29 |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
30 static |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
31 TSValue stateSkip(TSValue tsv) { |
288
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
32 tsv.current = tsv.tg->stateStart->tState; |
292 | 33 if (tsv.matchEnd) { |
34 ResultPtr r = NEW(Result); | |
35 r->continued = false; | |
36 r->begin = tsv.matchBegin; | |
293
948428caf616
NFA maximum match worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
292
diff
changeset
|
37 r->end = tsv.matchEnd; |
292 | 38 *tsv.blk->resultEnd = r; |
39 r->next = NULL; | |
40 tsv.blk->resultEnd = &r->next; | |
41 tsv.matchEnd=NULL; | |
42 } | |
298 | 43 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
|
44 return tsv; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
45 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
46 |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
47 static |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
48 TSValue stateMatch(TSValue tsv) { |
292 | 49 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
|
50 return tsv; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
51 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
52 |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
53 ResultPtr resultPrint(ResultPtr r,const char* comment) { |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
54 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
|
55 // printf("%s\n",comment); |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
56 for (;r;r = r->next) { |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
280
diff
changeset
|
57 if (r->continued) { |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
58 prev = r; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
59 break; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
60 } |
292 | 61 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
|
62 puts(""); |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
63 } |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
64 return prev; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
65 } |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
66 |
288
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
67 void |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
68 ceriumCreateAnyState(TransitionGeneratorPtr tg) { |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
69 tg->stateSkip = stateSkip; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
70 tg->stateMatch = stateMatch; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
71 tg->stateNothing = stateNothing; |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
72 createAnyState(tg); |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
73 generateTState(tg->anyState,tg); |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
74 // generateTState for startState. It is used in stateMatch. |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
75 generateTState(tg->stateList,tg); |
288
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
76 tg->stateStart = NEW(State); |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
77 *tg->stateStart = *tg->stateList; |
f2491681914e
special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
286
diff
changeset
|
78 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
|
79 generateTState(tg->stateStart,tg); |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
80 } |
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
81 |
266 | 82 int |
83 TMmain(TaskManager *manager, int argc, char *argv[]) | |
84 { | |
85 char *filename = 0; | |
271
6640b0d5bf13
remove anystate processing in sequential seqrch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
268
diff
changeset
|
86 st_time = getTime(); |
266 | 87 Search s = grep(argc,argv,true); |
277
7b4bcc7b5ae6
nextTState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
88 |
278
99d635926ef3
ceriumCreateAnyState implemented
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
277
diff
changeset
|
89 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
|
90 |
266 | 91 FileMapReduce *fmp = new FileMapReduce(manager,TASK_EXEC,TASK_EXEC_DATA_PARALLEL,TASK_PRINT); |
92 filename = fmp->init(argc, argv); | |
93 fmp->w->global = (void*)s.tg; | |
94 if (filename < 0) { | |
95 return -1; | |
96 } | |
97 fmp->division_out_size = sizeof(void*)*3; // *Result,*blockBegin,*blockEnd | |
98 task_init(); | |
99 fmp->run_start(manager, filename); | |
100 manager->set_TMend(TMend); | |
101 return 0; | |
102 } | |
103 | |
104 void | |
105 TMend(TaskManager *manager) | |
106 { | |
107 ed_time = getTime(); | |
108 printf("Time: %0.6f\n",ed_time-st_time); | |
109 } | |
110 | |
111 /* end */ |