diff regexParser/cerium/ppe/Exec.cc @ 281:b74e3b4b11d7

parallel search done
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sun, 31 Jan 2016 18:28:58 +0900
parents 6cc1d9779f45
children 87a801c14117
line wrap: on
line diff
--- a/regexParser/cerium/ppe/Exec.cc	Sun Jan 31 16:59:43 2016 +0900
+++ b/regexParser/cerium/ppe/Exec.cc	Sun Jan 31 18:28:58 2016 +0900
@@ -20,22 +20,27 @@
         tsv.current = tg->anyState->tState;
     }
     tsv.result = NULL;
-    tsv.resultEnd = &tsv.result;
-    unsigned char *end = buff.buffend;
-    buff.buffend = buff.buff+1;
-    tSearch(tsv);
+    ResultPtr result = NULL;
+    tsv.resultEnd = &result;
+    unsigned char *end = tsv.buff.buffend;
+    tsv.buff.buffend = tsv.buff.buff+1;
+    tsv = tSearch(tsv);
     tsv.blockBegin = tsv.current;
-    buff.buffend = end;
-    tSearch(tsv);
+    tsv.buff.buffend = end;
+    tsv = tSearch(tsv);
     tsv.blockEnd = tsv.current;
     if (tsv.blockEnd->state->bitState.bitContainer != 1) {
+        // partial match case at block end.
         ResultPtr r = NEW(Result);
+        r->continued = true;
         r->begin = tsv.buff.matchBegin;
-        r->end = NULL;
+        r->end = tsv.buff.buffptr-1;
         *tsv.resultEnd = r;
         r->next = NULL;
         tsv.resultEnd = &r->next;
+// printf("Exec %lx r->begin : %p r->end : %p\n",tsv.blockEnd->state->bitState.bitContainer, r->begin,r->end);
     }
+    tsv.result = result;
     return tsv;
 }
 
@@ -62,7 +67,7 @@
     buff.buff = buff.buffptr = buff.matchBegin = i_data;
     buff.buffend = buff.buff + length;
     TSValue tsv = blockSearch(tg,buff,task_spawned);
-    resultPrint(tsv.result,"Exec");
+//    resultPrint(tsv.result,"Exec");
     o_data[0] = (unsigned long)tsv.result;
     o_data[1] = (unsigned long)tsv.blockBegin->state;
     o_data[2] = (unsigned long)tsv.blockEnd->state;