summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2013-02-02 11:08:17 -0500
committerAdrian Thurston <thurston@complang.org>2013-02-02 11:08:17 -0500
commit116b212223225cc519862330d42b2426737fb4f4 (patch)
tree31d20ba07e0338f4ad5286b64fe599224a53ffbb
parent2e74066ca8fb99c6fcccf210f8b9c2400a62e821 (diff)
downloadcolm-116b212223225cc519862330d42b2426737fb4f4.tar.gz
return pointer to data bclok from getParseBlock
The next step is to use this pointer instead of the scanBuf to do the scanning.
-rw-r--r--colm/ctinput.cc8
-rw-r--r--colm/input.c11
-rw-r--r--colm/input.h9
-rw-r--r--colm/pdarun.c7
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: