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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
1 #include <stdio.h>
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
2 #include <string.h>
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
3 #include "Print.h"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
4 #include "Func.h"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
5 #include "FileMapReduce.h"
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
8
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
9 #define STATUS_NUM 2
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
10 /* これは必須 */
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
11 SchedDefineTask1(Print,run_print);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
12
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
13 static int
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
14 run_print(SchedTask *s, void *rbuf, void *wbuf)
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
15 {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
16 MapReduce *w = (MapReduce*)s->get_input(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
17
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
18 int out_size = w->division_out_size / sizeof(unsigned long long);
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
19 int out_task_num = w->task_num;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
20 ResultPtr prev = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
43 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
50 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
51 return 0;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
52 }