annotate regexParser/cerium/ppe/Exec.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 99d635926ef3
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 "Exec.h"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
4 #include "Func.h"
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
5 #include "regexParser.h"
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
6 #include "threadedSearch.h"
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
7 #include "FileMapReduce.h"
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
8
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
9 /* これは必須 */
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
10 SchedDefineTask1(Exec,blockedGrep);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
11
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
12 static
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
13 TSValue stateNothing(TSValue tsv) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
14 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
15 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
16
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
17 static
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
18 TSValue stateSkip(TSValue tsv) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
19 tsv.buff.matchBegin = tsv.buff.buffptr;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
20 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
21 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
22
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
23 static
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
24 TSValue stateMatch(TSValue tsv) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
25 ResultPtr r = NEW(Result);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
26 r->begin = tsv.buff.matchBegin;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
27 r->end = tsv.buff.buffptr;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
28 *tsv.resultEnd = r;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
29 r->next = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
30 tsv.resultEnd = &r->next;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
31 tsv.current = tsv.tg->stateList->tState;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
32 tsv.buff.buffptr--;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
33 tsv = stateSkip(tsv);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
34 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
35 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
36
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
37 TSValue blockSearch(TransitionGeneratorPtr tg,Buffer buff) {
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
38 TSValue tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
39 tsv.buff = buff;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
40 tsv.tg = tg;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
41 tsv.result = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
42 tsv.resultEnd = &tsv.result;
271
6640b0d5bf13 remove anystate processing in sequential seqrch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 266
diff changeset
43 tsv.current = tg->anyState->tState;
275
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
44 tsv.current->stateSkip = stateSkip;
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
45 tsv.current->stateContinue = stateNothing;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
46 tsv.tg->stateSkip = stateSkip;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
47 tsv.tg->stateMatch = stateMatch;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
48 tsv.tg->stateNothing = stateNothing;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
49 unsigned char *end = buff.buffend;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
50 buff.buffend = buff.buff+1;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
51 tSearch(tsv);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
52 tsv.blockBegin = tsv.current;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
53 buff.buffend = end;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
54 tSearch(tsv);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
55 tsv.blockEnd = tsv.current;
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
56 if (tsv.blockEnd->state->bitState.bitContainer != 1) {
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
57 ResultPtr r = NEW(Result);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
58 r->begin = tsv.buff.matchBegin;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
59 r->end = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
60 *tsv.resultEnd = r;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
61 r->next = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
62 tsv.resultEnd = &r->next;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
63 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
64 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
65 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
66
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
67 static int
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
68 blockedGrep(SchedTask *s, void *rbuf, void *wbuf)
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
69 {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
70 long task_spwaned = (long)s->get_param(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
71 long division_size = (long)s->get_param(1);
275
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
72 long length = (long)s->get_param(2);
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
73 long out_size = (long)s->get_param(3);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
74 MapReduce *w = (MapReduce*)s->get_param(4);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
75 long allocation = task_spwaned + (long)s->x;
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
76 unsigned char* i_data;
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
77 unsigned long * o_data;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
78 if (division_size) {
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
79 i_data = (unsigned char*)s->get_input(rbuf,0) + allocation*division_size;
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
80 o_data = (unsigned long *)s->get_output(wbuf,1) + allocation*out_size;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
81 } else {
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
82 i_data = (unsigned char*)s->get_input(0);
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
83 o_data = (unsigned long *)s->get_output(0);
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
84 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
85 TransitionGeneratorPtr tg = (TransitionGeneratorPtr)w->global;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
86 Buffer buff;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
87 buff.buff = buff.buffptr = buff.matchBegin = i_data;
275
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
88 buff.buffend = buff.buff + length;
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
89 TSValue tsv = blockSearch(tg,buff);
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
90 o_data[0] = (unsigned long)tsv.result;
275
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
91 o_data[1] = (unsigned long)tsv.blockBegin->state;
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
92 o_data[2] = (unsigned long)tsv.blockEnd->state;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
93 return 0;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
94 }