diff options
-rw-r--r-- | colm/ctinput.cc | 8 | ||||
-rw-r--r-- | colm/input.c | 11 | ||||
-rw-r--r-- | colm/input.h | 9 | ||||
-rw-r--r-- | colm/pdarun.c | 7 |
4 files changed, 25 insertions, 10 deletions
diff --git a/colm/ctinput.cc b/colm/ctinput.cc index 10f89da9..9c2f848e 100644 --- a/colm/ctinput.cc +++ b/colm/ctinput.cc @@ -60,7 +60,8 @@ LangEl *inputStreamPatternGetLangEl( StreamImpl *ss, long *bindId, char **data, return klangEl; } -int inputStreamPatternGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int *copied ) +int inputStreamPatternGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, + char *dest, int length, char **pdp, int *copied ) { *copied = 0; @@ -95,6 +96,7 @@ int inputStreamPatternGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, c skip = 0; memcpy( dest, src, slen ) ; + *pdp = src; *copied += slen; break; } @@ -283,7 +285,8 @@ LangEl *inputStreamConsGetLangEl( StreamImpl *ss, long *bindId, char **data, lon return klangEl; } -int inputStreamConsGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int *copied ) +int inputStreamConsGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, + char *dest, int length, char **pdp, int *copied ) { *copied = 0; @@ -318,6 +321,7 @@ int inputStreamConsGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, char skip = 0; memcpy( dest, src, slen ) ; + *pdp = src; *copied += slen; break; } diff --git a/colm/input.c b/colm/input.c index ad52f56b..5adfb35e 100644 --- a/colm/input.c +++ b/colm/input.c @@ -178,7 +178,8 @@ void initInputFuncs() * Base run-time input streams. */ -int fdGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int *copied ) +int fdGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, + char *dest, int length, char **pdp, int *copied ) { int ret = 0; *copied = 0; @@ -199,6 +200,7 @@ int fdGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int l int slen = received < length ? received : length; memcpy( dest, runBuf->data, slen ); + *pdp = runBuf->data; *copied = slen; ret = INPUT_DATA; break; @@ -225,6 +227,7 @@ int fdGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int l int slen = avail < length ? avail : length; memcpy( dest, src, slen ) ; + *pdp = src; *copied += slen; ret = INPUT_DATA; break; @@ -507,7 +510,8 @@ void _unsetEof( StreamImpl *is ) } } -int _getParseBlock( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int length, int *copied ) +int _getParseBlock( FsmRun *fsmRun, StreamImpl *is, int skip, + char *dest, int length, char **pdp, int *copied ) { int ret = 0; *copied = 0; @@ -523,7 +527,7 @@ int _getParseBlock( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int le if ( buf->type == RunBufSourceType ) { Stream *stream = (Stream*)buf->tree; - int type = stream->in->funcs->getData( fsmRun, stream->in, skip, dest, length, copied ); + int type = stream->in->funcs->getParseBlock( fsmRun, stream->in, skip, dest, length, pdp, copied ); // if ( type == INPUT_EOD && !stream->in->eosSent ) { // stream->in->eosSent = 1; @@ -572,6 +576,7 @@ int _getParseBlock( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int le int slen = avail <= length ? avail : length; memcpy( dest, src, slen ) ; + *pdp = src; *copied += slen; ret = INPUT_DATA; break; diff --git a/colm/input.h b/colm/input.h index 59473932..e2b2fce1 100644 --- a/colm/input.h +++ b/colm/input.h @@ -88,7 +88,8 @@ typedef struct _StreamImpl StreamImpl; struct StreamFuncs { - int (*getParseBlock)( struct _FsmRun *fsmRun, StreamImpl *ss, int offset, char *dest, int length, int *copied ); + int (*getParseBlock)( struct _FsmRun *fsmRun, StreamImpl *ss, int offset, + char *dest, int length, char **pdp, int *copied ); int (*getData)( struct _FsmRun *fsmRun, StreamImpl *ss, int offset, char *dest, int length, int *copied ); @@ -168,8 +169,10 @@ void initConsFuncs(); /* The input stream interface. */ -int _getData( struct _FsmRun *fsmRun, StreamImpl *in, int offset, char *dest, int length, int *copied ); -int _getParseBlock( struct _FsmRun *fsmRun, StreamImpl *in, int offset, char *dest, int length, int *copied ); +int _getData( struct _FsmRun *fsmRun, StreamImpl *in, int offset, + char *dest, int length, int *copied ); +int _getParseBlock( struct _FsmRun *fsmRun, StreamImpl *in, int offset, + char *dest, int length, char **pdp, int *copied ); int _consumeData( StreamImpl *in, int length ); int _undoConsumeData( struct _FsmRun *fsmRun, StreamImpl *is, const char *data, int length ); diff --git a/colm/pdarun.c b/colm/pdarun.c index 5ff7921e..ace7b019 100644 --- a/colm/pdarun.c +++ b/colm/pdarun.c @@ -1094,9 +1094,12 @@ long scanToken( Program *prg, PdaRun *pdaRun, FsmRun *fsmRun, StreamImpl *is ) /* Get more data. */ int have = fsmRun->tokstart != 0 ? fsmRun->p - fsmRun->tokstart : 0; - int len = 0; + debug( REALM_SCAN, "fetching data: have: %d space: %d\n", have, space ); - int type = is->funcs->getParseBlock( fsmRun, is, have, fsmRun->p, space, &len ); + + char *pd = 0; + int len = 0; + int type = is->funcs->getParseBlock( fsmRun, is, have, fsmRun->p, space, &pd, &len ); switch ( type ) { case INPUT_DATA: |