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