Mercurial > hg > Applications > Grep
annotate regexParser/cerium/ppe/Print.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 | 87a801c14117 |
children | c5a7caa37f61 |
rev | line source |
---|---|
266 | 1 #include <stdio.h> |
2 #include <string.h> | |
3 #include "Print.h" | |
4 #include "Func.h" | |
5 #include "FileMapReduce.h" | |
272 | 6 #include "regexParser.h" |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
275
diff
changeset
|
7 #include "CeriumMain.h" |
266 | 8 |
9 #define STATUS_NUM 2 | |
10 /* これは必須 */ | |
11 SchedDefineTask1(Print,run_print); | |
12 | |
13 static int | |
14 run_print(SchedTask *s, void *rbuf, void *wbuf) | |
15 { | |
16 MapReduce *w = (MapReduce*)s->get_input(0); | |
17 | |
18 int out_size = w->division_out_size / sizeof(unsigned long long); | |
272 | 19 int out_task_num = w->task_num; |
266 | 20 ResultPtr prev = NULL; |
21 for (int i = 0; i < out_task_num ; i++) { | |
275
8879eb8c64a8
remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
22 ResultPtr r = (ResultPtr)w->o_data[i*out_size+0]; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
23 if (r == NULL) { |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
24 prev = NULL; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
25 continue; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
26 } |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
27 StatePtr blockBegin = (StatePtr)w->o_data[i*out_size+1]; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
28 if (prev) { |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
29 if (i >= out_task_num) break; |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
30 // 最後のブロックでなく、前の prevBlockEnd が state 1 でない場合) |
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
31 StatePtr prevBlockEnd = (StatePtr)w->o_data[i*out_size-1]; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
32 #if 0 |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
33 printf("task %d prev begin : %p r->begin : %p r->end : %p\n", i,prev->begin,r->begin,r->end); |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
34 printf("nextblockBegin : %lx prevBlockEnd : %lx : string ",blockBegin->bitState.bitContainer,prevBlockEnd->bitState.bitContainer); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
35 fwrite(r->begin,r->end - r->begin-1,1,stdout); |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
36 printf(" match %d\n", ((prevBlockEnd->bitState.bitContainer & ~blockBegin->bitState.bitContainer)==0)? 1 : 0 ); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
37 #endif |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
38 if ((prevBlockEnd->bitState.bitContainer & ~blockBegin->bitState.bitContainer)==0) { |
266 | 39 // 前のブロックの matchBegin から最初 result の end までがマッチ |
293
948428caf616
NFA maximum match worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
282
diff
changeset
|
40 fwrite(prev->begin,r->end - prev->begin,1,stdout); |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
41 // printf("####"); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
42 if (!r->continued) puts(""); |
266 | 43 } |
44 r = r->next; | |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
45 // printf("%p\n",r); |
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
46 } else { |
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
47 if (blockBegin->bitState.bitContainer != 1) r = r->next; |
266 | 48 } |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
275
diff
changeset
|
49 prev = resultPrint(r,"Print"); |
266 | 50 } |
51 return 0; | |
52 } |