changeset 278:99d635926ef3

ceriumCreateAnyState implemented
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sat, 30 Jan 2016 21:19:05 +0900
parents 7b4bcc7b5ae6
children 6cc1d9779f45
files regexParser/cerium/CeriumMain.cc regexParser/cerium/ppe/Exec.cc regexParser/subsetConstruction.h regexParser/threadedSearch.cc
diffstat 4 files changed, 39 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/regexParser/cerium/CeriumMain.cc	Sat Jan 30 20:44:37 2016 +0900
+++ b/regexParser/cerium/CeriumMain.cc	Sat Jan 30 21:19:05 2016 +0900
@@ -21,6 +21,41 @@
     return tv.tv_sec + (double)tv.tv_usec*1e-6;
 }
 
+static
+TSValue stateNothing(TSValue tsv) {
+    return tsv;
+}
+
+static
+TSValue stateSkip(TSValue tsv) {
+    tsv.buff.matchBegin = tsv.buff.buffptr;
+    return tsv;
+}
+
+static
+TSValue stateMatch(TSValue tsv) {
+    ResultPtr r = NEW(Result);
+    r->begin = tsv.buff.matchBegin;
+    r->end = tsv.buff.buffptr;
+    *tsv.resultEnd = r;
+    r->next = NULL;
+    tsv.resultEnd = &r->next;
+    tsv.current = tsv.tg->stateList->tState;
+    tsv.buff.buffptr--;
+    tsv = stateSkip(tsv);
+    return tsv;
+}
+
+void ceriumCreateAnyState(TransitionGeneratorPtr tg) {
+    tg->stateSkip = stateSkip;
+    tg->stateMatch = stateMatch;
+    tg->stateNothing = stateNothing;
+    createAnyState(tg);
+    generateTState(tg->anyState,tg);
+    // generateTState for startState. It is used in stateMatch.
+    generateTState(tg->stateList,tg);
+}
+
 int
 TMmain(TaskManager *manager, int argc, char *argv[])
 {
@@ -28,10 +63,7 @@
     st_time = getTime();
     Search s = grep(argc,argv,true);
 
-    createAnyState(s.tg); 
-    generateTState(s.tg->anyState,s.tg);
-    // generateTState for startState. It is used in stateMatch.
-    generateTState(s.tg->stateList,s.tg);
+    ceriumCreateAnyState(s.tg);
 
     FileMapReduce *fmp = new FileMapReduce(manager,TASK_EXEC,TASK_EXEC_DATA_PARALLEL,TASK_PRINT);
     filename = fmp->init(argc, argv);
--- a/regexParser/cerium/ppe/Exec.cc	Sat Jan 30 20:44:37 2016 +0900
+++ b/regexParser/cerium/ppe/Exec.cc	Sat Jan 30 21:19:05 2016 +0900
@@ -9,43 +9,13 @@
 /* これは必須 */
 SchedDefineTask1(Exec,blockedGrep);
 
-static
-TSValue stateNothing(TSValue tsv) {
-    return tsv;
-}
-
-static
-TSValue stateSkip(TSValue tsv) {
-    tsv.buff.matchBegin = tsv.buff.buffptr;
-    return tsv;
-}
-
-static
-TSValue stateMatch(TSValue tsv) {
-    ResultPtr r = NEW(Result);
-    r->begin = tsv.buff.matchBegin;
-    r->end = tsv.buff.buffptr;
-    *tsv.resultEnd = r;
-    r->next = NULL;
-    tsv.resultEnd = &r->next;
-    tsv.current = tsv.tg->stateList->tState;
-    tsv.buff.buffptr--;
-    tsv = stateSkip(tsv);
-    return tsv;
-}
-
 TSValue blockSearch(TransitionGeneratorPtr tg,Buffer buff) {
     TSValue tsv;
     tsv.buff = buff;
     tsv.tg = tg;
+    tsv.current = tg->anyState->tState;
     tsv.result = NULL;
     tsv.resultEnd = &tsv.result;
-    tsv.current = tg->anyState->tState;
-    tsv.current->stateSkip = stateSkip;
-    tsv.current->stateContinue = stateNothing;
-    tsv.tg->stateSkip = stateSkip;
-    tsv.tg->stateMatch = stateMatch;
-    tsv.tg->stateNothing = stateNothing;
     unsigned char *end = buff.buffend;
     buff.buffend = buff.buff+1;
     tSearch(tsv);
--- a/regexParser/subsetConstruction.h	Sat Jan 30 20:44:37 2016 +0900
+++ b/regexParser/subsetConstruction.h	Sat Jan 30 21:19:05 2016 +0900
@@ -10,6 +10,7 @@
 extern bool hasNext(CharClassWalkerPtr walk);
 extern CharClassWalkerPtr createCharClassWalker (CharClassPtr next);
 extern void printState(TransitionGeneratorPtr tg);
+extern void printState(StatePtr state);
 extern void determinize(StatePtr s, TransitionGeneratorPtr tg);
 extern void subsetConstruction(TransitionGeneratorPtr tg);
 extern void createAnyState(TransitionGeneratorPtr tg);
--- a/regexParser/threadedSearch.cc	Sat Jan 30 20:44:37 2016 +0900
+++ b/regexParser/threadedSearch.cc	Sat Jan 30 21:19:05 2016 +0900
@@ -85,6 +85,7 @@
 void tSearch(TSValue tsv) {
     next: while (tsv.buff.buffptr < tsv.buff.buffend) {
         unsigned char c = *tsv.buff.buffptr++;
+        // printState(tsv.current->state);
         for (int i = 0; i < tsv.current->ccvSize; i++) {
             CCVPtr ccv = &tsv.current->ccv[i];
             if (c<ccv->begin) {