annotate regexParser/cerium/ppe/Print.cc @ 275:8879eb8c64a8

remove segmentation fault
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sat, 30 Jan 2016 19:06:41 +0900
parents 5aa9d01926f1
children 6cc1d9779f45
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"
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
7
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
8 #define STATUS_NUM 2
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
9 /* これは必須 */
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
10 SchedDefineTask1(Print,run_print);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
11
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
12 static int
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
13 run_print(SchedTask *s, void *rbuf, void *wbuf)
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
14 {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
15 MapReduce *w = (MapReduce*)s->get_input(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
16
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
17 int out_size = w->division_out_size / sizeof(unsigned long long);
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
18 int out_task_num = w->task_num;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
19 ResultPtr prev = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
20 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
21 ResultPtr r = (ResultPtr)w->o_data[i*out_size+0];
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
22 StatePtr blockEnd = (StatePtr)w->o_data[i*out_size+2];
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
23 StatePtr blockBegin = (StatePtr)w->o_data[i*out_size+4]; // next Block's blockBegin.
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
24 if (prev && i != out_task_num-1) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
25 // 最後のブロックでなく、前の blockEnd が state 1 でない場合)
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
26 if ((blockBegin->bitState.bitContainer & ~blockEnd->bitState.bitContainer)==0) {
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
27 // 前のブロックの matchBegin から最初 result の end までがマッチ
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
28 fwrite(prev->begin,r->end - prev->begin,1,stdout);
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
29 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
30 r = r->next;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
31 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
32 for (;r;r = r->next) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
33 if (r->end == NULL) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
34 prev = r;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
35 break;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
36 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
37 fwrite(r->begin,r->end - r->begin,1,stdout);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
38 puts("\n");
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
39 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
40 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
41 return 0;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
42 }