annotate regexParser/cerium/ppe/Exec.cc @ 266:e51cac73e42a

CeriumGrep start
author masa
date Thu, 28 Jan 2016 21:14:34 +0900
parents
children 6640b0d5bf13
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"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
5
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
6 /* これは必須 */
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
7 SchedDefineTask1(Exec,blockedGrep);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
8
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
9 TSValue stateNothing(TSValue tsv) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
10 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
11 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
12
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
13 TSValue stateSkip(TSValue tsv) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
14 tsv.buff.matchBegin = tsv.buff.buffptr;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
15 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
16 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
17
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
18 TSValue stateMatch(TSValue tsv) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
19 ResultPtr r = NEW(Result);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
20 r->begin = tsv.buff.matchBegin;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
21 r->end = tsv.buff.buffptr;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
22 *tsv.resultEnd = r;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
23 r->next = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
24 tsv.resultEnd = &r->next;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
25 tsv.current = tsv.tg->stateList->tState;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
26 tsv.buff.buffptr--;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
27 tsv = stateSkip(tsv);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
28 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
29 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
30
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
31 TSValue threadedSearch(TransitionGeneratorPtr tg,Buffer buff) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
32 TSValue tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
33 tsv.buff = buff;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
34 tsv.tg = tg;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
35 tsv.result = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
36 tsv.resultEnd = &tsv.result;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
37 tsv.current = generateTState(tg->anyState);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
38 tsv.tg->stateSkip = stateSkip;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
39 tsv.tg->stateMatch = stateMatch;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
40 tsv.tg->stateNothing = stateNothing;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
41 unsigned char *end = buff.buffend;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
42 buff.buffend = buff.buff+1;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
43 tSearch(tsv);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
44 tsv.blockBegin = tsv.current;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
45 buff.buffend = end;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
46 tSearch(tsv);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
47 tsv.blockEnd = tsv.current;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
48 if (tsv.blockEnd->bi.bitContainer != 1) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
49 ResultPtr r = NEW(Result);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
50 r->begin = tsv.buff.matchBegin;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
51 r->end = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
52 *tsv.resultEnd = r;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
53 r->next = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
54 tsv.resultEnd = &r->next;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
55 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
56 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
57 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
58
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
59 static int
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
60 blockedGrep(SchedTask *s, void *rbuf, void *wbuf)
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
61 {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
62 long task_spwaned = (long)s->get_param(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
63 long division_size = (long)s->get_param(1);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
64 long length = (long)s->get_param(2);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
65 long out_size = (long)s->get_param(3);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
66 MapReduce *w = (MapReduce*)s->get_param(4);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
67 long allocation = task_spwaned + (long)s->x;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
68 char* i_data;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
69 unsigned long long* o_data;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
70 if (division_size) {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
71 i_data = (char*)s->get_input(rbuf,0) + allocation*division_size;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
72 o_data = (unsigned long long*)s->get_output(wbuf,1) + allocation*out_size;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
73 } else {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
74 i_data = (char*)s->get_input(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
75 o_data = (unsigned long long*)s->get_output(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
76 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
77 TransitionGeneratorPtr tg = (TransitionGeneratorPtr)w->global;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
78 StatePtr startState = tg->anyState;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
79 Buffer buff;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
80 buff.buff = buff.buffptr = buff.matchBegin = i_data;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
81 buff.buffend = buff.buff + division_size;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
82 TSValue tsv = threadedSearch(tg,buff);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
83 o_data[0] = (void*)tsv.result;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
84 o_data[1] = (void*)tsv.blockBegin;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
85 o_data[2] = (void*)tsv.blockEnd;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
86 return 0;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
87 }