diff regexParser/cerium/CeriumMain.cc @ 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
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);