changeset 247:96c2507fd22d

fix
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 22 Jan 2016 18:37:04 +0900
parents 58de1744d7a9
children 2b1fbfb92d54
files regexParser/threadedSearch.cc
diffstat 1 files changed, 42 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/regexParser/threadedSearch.cc	Thu Jan 21 19:57:48 2016 +0900
+++ b/regexParser/threadedSearch.cc	Fri Jan 22 18:37:04 2016 +0900
@@ -1,18 +1,25 @@
+#include <stdio.h>
+#include <stdlib.h>
+
 #include "regexParser.h"
 #include "subsetConstruction.h"
 
 struct tsValue;
 
-typedef struct tState {
-    State *state;
-    void stateSkip(struct tsValue);
-    int ccvSize;
-    struct ccv{
+typedef struct ccv {
         unsigned long begin;
         unsigned long end;
         BitVector state;
         struct tState *tState;
-    } *ccv;
+} *CCV;
+
+void stateSkip(TSValue tsv);
+
+typedef struct tState {
+    State *state;
+    void stateSkip(tsValue);
+    int ccvSize;
+    CCV ccv;
 } TState, *TStatePtr;
 
 typedef struct result {
@@ -24,6 +31,7 @@
 typedef struct tsValue {
     Buffer buff;
     ResultPtr result;
+    State *stateArray;
     TState *current;
     TState *blockBegin;
     TState *blockEnd;
@@ -34,9 +42,35 @@
     tsv.current->stateSkip(tsv);
 }
 
+TStatePtr generateTState(State state) {
+    TStatePtr tState = NEW(TState);
+    int ccvSize = 0;
+    CharClassWalkerPtr ccw = createCharClassWalker(state.cc);
+    while (hasNext(ccw)) {
+        CharClassPtr cc = getNext(ccw);
+        ccvSize++;
+    }
+    if (ccvSize == 0) return tState;
+    else tState->ccv = (ccv*)malloc(sizeof(ccv)*ccvSize);
+    ccw = createCharClassWalker(state.cc);
+    int i = 0;
+    while (hasNext(ccw)) {
+        CharClassPtr cc = getNext(ccw);
+        unsigned long begin = cc->cond.range.begin;
+        unsigned long end = cc->cond.range.end;
+        struct ccv *ccv = &tState->ccv[i++];
+        ccv->begin = begin;
+        ccv->end = end;
+        ccv->tState = NULL;
+        ccv->state = cc->nextState;
+    }
+    free(ccw);
+    return tState;
+}
+
 void tSearch(TSValue tsv) {
-    next: while (buff.buffptr < buff.buffend) {
-        unsigned char c = *buff.buffptr++;
+    next: while (tsv.buff.buffptr < tsv.buff.buffend) {
+        unsigned char c = *tsv.buff.buffptr++;
         for (int i = 0; i < tsv.current->ccvSize; i++) {
             if (c<tsv.current->ccv[i].begin) tsv.current->stateSkip(tsv);
             else if (c<=tsv.current->ccv[i].end) {
@@ -52,28 +86,3 @@
         tsv.current->stateSkip(tsv);
     }
 }
-
-TStatePtr generateTState(StatePtr state) {
-    TState tState = NEW(TState);
-    int ccvSize = 0;
-    CharClassWalkerPtr ccw = createCharClassWalker(state->cc);
-    while (hasNext(ccw)) {
-        CharClassPtr cc = getNext(ccw);
-        ccvSize++;
-    }    
-    if (ccvSize == 0) return tState;
-    else tState->ccv = (struct ccv*)malloc(sizeof(struct ccv)*ccvSize);
-    CharClassWalkerPtr ccw = createCharClassWalker(state->cc);
-    while (hasNext(ccw)) {
-        CharClassPtr cc = getNext(ccw);
-        unsigned long begin = cc->cond.range.begin;
-        unsigned long end = cc->cond.range.end;
-        struct ccv *ccv = &tState->ccv[i++];
-        ccv->begin = begin;
-        ccv->end = end;
-        ccv->tState = NULL;
-        ccv->state = cc->nextState;
-    }
-    free(ccw);
-    return tState;
-}