diff options
author | Adrian Thurston <thurston@complang.org> | 2013-02-05 21:54:50 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2013-02-05 21:55:33 -0500 |
commit | 08e102f8c7eddc8876daeb55b21c15b6403d1024 (patch) | |
tree | f3d841f9e2d63b6cb4b04cd00d22a859a34ae01f | |
parent | 63e620c91ae722386b97ab812cf4f4deeef91b71 (diff) | |
download | colm-08e102f8c7eddc8876daeb55b21c15b6403d1024.tar.gz |
return the amount copied from getData
Was returning this via a pointer passed as an arg and returning the type of
data block. Since getData is now used only for copying data after a successful
match, we only need the length copied.
-rw-r--r-- | colm/ctinput.cc | 24 | ||||
-rw-r--r-- | colm/input.c | 129 | ||||
-rw-r--r-- | colm/input.h | 4 | ||||
-rw-r--r-- | colm/pdarun.c | 17 |
4 files changed, 63 insertions, 111 deletions
diff --git a/colm/ctinput.cc b/colm/ctinput.cc index a445a8fc..90e794bd 100644 --- a/colm/ctinput.cc +++ b/colm/ctinput.cc @@ -108,19 +108,19 @@ int inputStreamPatternGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, return INPUT_DATA; } -int inputStreamPatternGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int *copied ) +int inputStreamPatternGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length ) { - *copied = 0; + int copied = 0; PatternItem *buf = ss->patItem; int offset = ss->offset; while ( true ) { if ( buf == 0 ) - return INPUT_EOD; + return 0; if ( buf->type == PatternItem::FactorType ) - return INPUT_LANG_EL; + return 0; assert ( buf->type == PatternItem::InputText ); int avail = buf->data.length() - offset; @@ -143,7 +143,7 @@ int inputStreamPatternGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *d skip = 0; memcpy( dest, src, slen ) ; - *copied += slen; + copied += slen; break; } } @@ -152,7 +152,7 @@ int inputStreamPatternGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *d offset = 0; } - return INPUT_DATA; + return copied; } void inputStreamPatternBackup( StreamImpl *ss ) @@ -332,19 +332,19 @@ int inputStreamConsGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, return INPUT_DATA; } -int inputStreamConsGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int *copied ) +int inputStreamConsGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length ) { - *copied = 0; + int copied = 0; ConsItem *buf = ss->consItem; int offset = ss->offset; while ( true ) { if ( buf == 0 ) - return INPUT_EOD; + return 0; if ( buf->type == ConsItem::ExprType || buf->type == ConsItem::FactorType ) - return INPUT_LANG_EL; + return 0; assert ( buf->type == ConsItem::InputText ); int avail = buf->data.length() - offset; @@ -367,7 +367,7 @@ int inputStreamConsGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest skip = 0; memcpy( dest, src, slen ) ; - *copied += slen; + copied += slen; break; } } @@ -376,7 +376,7 @@ int inputStreamConsGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest offset = 0; } - return INPUT_DATA; + return copied; } void inputStreamConsBackup( StreamImpl *ss ) diff --git a/colm/input.c b/colm/input.c index 5512450f..eba93864 100644 --- a/colm/input.c +++ b/colm/input.c @@ -135,36 +135,6 @@ static void sourceStreamPrepend( StreamImpl *ss, RunBuf *runBuf ) } } -void initStreamFuncs() -{ - memset( &streamFuncs, 0, sizeof(struct StreamFuncs) ); - streamFuncs.getData = &_getData; - streamFuncs.getParseBlock = &_getParseBlock; - streamFuncs.consumeData = &_consumeData; - streamFuncs.undoConsumeData = &_undoConsumeData; - streamFuncs.consumeTree = &_consumeTree; - streamFuncs.undoConsumeTree = &_undoConsumeTree; - streamFuncs.consumeLangEl = &_consumeLangEl; - streamFuncs.undoConsumeLangEl = &_undoConsumeLangEl; - - streamFuncs.setEof = &_setEof; - streamFuncs.unsetEof = &_unsetEof; - - streamFuncs.prependData = &_prependData; - streamFuncs.prependTree = &_prependTree; - streamFuncs.prependStream = &_prependStream; - streamFuncs.undoPrependData = &_undoPrependData; - streamFuncs.undoPrependTree = &_undoPrependTree; - - streamFuncs.appendData = &_appendData; - streamFuncs.appendTree = &_appendTree; - streamFuncs.appendStream = &_appendStream; - streamFuncs.undoAppendData = &_undoAppendData; - streamFuncs.undoAppendTree = &_undoAppendTree; - streamFuncs.undoAppendStream = &_undoAppendStream; -} - - void initInputFuncs() { initStreamFuncs(); @@ -238,10 +208,9 @@ int fdGetParseBlock( FsmRun *fsmRun, StreamImpl *ss, return ret; } -int fdGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int *copied ) +int fdGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length ) { - int ret = 0; - *copied = 0; + int copied = 0; /* Move over skip bytes. */ RunBuf *buf = ss->queue; @@ -252,15 +221,13 @@ int fdGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, sourceStreamAppend( ss, runBuf ); int received = ss->funcs->getDataSource( ss, runBuf->data, FSM_BUFSIZE ); if ( received == 0 ) { - ret = INPUT_EOD; break; } runBuf->length = received; int slen = received < length ? received : length; memcpy( dest, runBuf->data, slen ); - *copied = slen; - ret = INPUT_DATA; + copied = slen; break; } @@ -285,8 +252,7 @@ int fdGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, int slen = avail < length ? avail : length; memcpy( dest, src, slen ) ; - *copied += slen; - ret = INPUT_DATA; + copied += slen; break; } } @@ -294,7 +260,7 @@ int fdGetData( FsmRun *fsmRun, StreamImpl *ss, int skip, char *dest, int length, buf = buf->next; } - return ret; + return copied; } int fdConsumeData( StreamImpl *ss, int length ) @@ -608,49 +574,37 @@ int _getParseBlock( FsmRun *fsmRun, StreamImpl *is, return ret; } -int _getData( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int length, int *copied ) +int _getData( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int length ) { - int ret = 0; - *copied = 0; + int copied = 0; /* Move over skip bytes. */ RunBuf *buf = is->queue; while ( true ) { if ( buf == 0 ) { /* Got through the in-mem buffers without copying anything. */ - ret = is->eof ? INPUT_EOF : INPUT_EOD; break; } if ( buf->type == RunBufSourceType ) { Stream *stream = (Stream*)buf->tree; - int type = stream->in->funcs->getData( fsmRun, stream->in, skip, dest, length, copied ); + copied += stream->in->funcs->getData( fsmRun, stream->in, skip, dest, length ); -// if ( type == INPUT_EOD && !stream->in->eosSent ) { -// stream->in->eosSent = 1; -// ret = INPUT_EOS; -// continue; -// } - - if ( type == INPUT_EOD || type == INPUT_EOF ) { + if ( copied == 0 ) { debug( REALM_INPUT, "skipping over input\n" ); buf = buf->next; continue; } - ret = type; + //ret = type; break; } - if ( buf->type == RunBufTokenType ) { - ret = INPUT_TREE; + if ( buf->type == RunBufTokenType ) break; - } - if ( buf->type == RunBufIgnoreType ) { - ret = INPUT_IGNORE; + if ( buf->type == RunBufIgnoreType ) break; - } int avail = buf->length - buf->offset; @@ -673,8 +627,7 @@ int _getData( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int length, int slen = avail <= length ? avail : length; memcpy( dest, src, slen ) ; - *copied += slen; - ret = INPUT_DATA; + copied += slen; break; } } @@ -682,30 +635,7 @@ int _getData( FsmRun *fsmRun, StreamImpl *is, int skip, char *dest, int length, buf = buf->next; } -#if DEBUG - switch ( ret ) { - case INPUT_DATA: - debug( REALM_INPUT, "get data: DATA copied: %d: %.*s\n", *copied, (int)*copied, dest ); - break; - case INPUT_EOD: - debug( REALM_INPUT, "get data: EOD\n" ); - break; - case INPUT_EOF: - debug( REALM_INPUT, "get data: EOF\n" ); - break; - case INPUT_TREE: - debug( REALM_INPUT, "get data: TREE\n" ); - break; - case INPUT_IGNORE: - debug( REALM_INPUT, "get data: IGNORE\n" ); - break; - case INPUT_LANG_EL: - debug( REALM_INPUT, "get data: LANG_EL\n" ); - break; - } -#endif - - return ret; + return copied; } int _consumeData( StreamImpl *is, int length ) @@ -1033,3 +963,34 @@ Tree *_undoAppendTree( StreamImpl *is ) free( runBuf ); return tree; } + +void initStreamFuncs() +{ + memset( &streamFuncs, 0, sizeof(struct StreamFuncs) ); + streamFuncs.getData = &_getData; + streamFuncs.getParseBlock = &_getParseBlock; + streamFuncs.consumeData = &_consumeData; + streamFuncs.undoConsumeData = &_undoConsumeData; + streamFuncs.consumeTree = &_consumeTree; + streamFuncs.undoConsumeTree = &_undoConsumeTree; + streamFuncs.consumeLangEl = &_consumeLangEl; + streamFuncs.undoConsumeLangEl = &_undoConsumeLangEl; + + streamFuncs.setEof = &_setEof; + streamFuncs.unsetEof = &_unsetEof; + + streamFuncs.prependData = &_prependData; + streamFuncs.prependTree = &_prependTree; + streamFuncs.prependStream = &_prependStream; + streamFuncs.undoPrependData = &_undoPrependData; + streamFuncs.undoPrependTree = &_undoPrependTree; + + streamFuncs.appendData = &_appendData; + streamFuncs.appendTree = &_appendTree; + streamFuncs.appendStream = &_appendStream; + streamFuncs.undoAppendData = &_undoAppendData; + streamFuncs.undoAppendTree = &_undoAppendTree; + streamFuncs.undoAppendStream = &_undoAppendStream; +} + + diff --git a/colm/input.h b/colm/input.h index e37a9383..036f0cbd 100644 --- a/colm/input.h +++ b/colm/input.h @@ -92,7 +92,7 @@ struct StreamFuncs int skip, char **pdp, int *copied ); int (*getData)( struct _FsmRun *fsmRun, StreamImpl *ss, - int offset, char *dest, int length, int *copied ); + int offset, char *dest, int length ); int (*consumeData)( StreamImpl *ss, int length ); int (*undoConsumeData)( struct _FsmRun *fsmRun, StreamImpl *ss, const char *data, int length ); @@ -170,8 +170,6 @@ 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 skip, char **pdp, int *copied ); int _consumeData( StreamImpl *in, int length ); diff --git a/colm/pdarun.c b/colm/pdarun.c index 85c9148a..d5fab334 100644 --- a/colm/pdarun.c +++ b/colm/pdarun.c @@ -135,8 +135,7 @@ Head *streamPull( Program *prg, FsmRun *fsmRun, StreamImpl *is, long length ) runBuf->next = fsmRun->consumeBuf; fsmRun->consumeBuf = runBuf; - int lenCopied = 0; - is->funcs->getData( fsmRun, is, 0, runBuf->data, length, &lenCopied ); + is->funcs->getData( fsmRun, is, 0, runBuf->data, length ); is->funcs->consumeData( is, length ); fsmRun->p = fsmRun->pe = 0; @@ -764,8 +763,7 @@ Head *peekMatch( Program *prg, FsmRun *fsmRun, StreamImpl *is ) runBuf->next = fsmRun->consumeBuf; fsmRun->consumeBuf = runBuf; - int lenCopied = 0; - is->funcs->getData( fsmRun, is, 0, runBuf->data, length, &lenCopied ); + is->funcs->getData( fsmRun, is, 0, runBuf->data, length ); fsmRun->p = fsmRun->pe = 0; fsmRun->toklen = 0; @@ -794,14 +792,9 @@ Head *extractMatch( Program *prg, FsmRun *fsmRun, StreamImpl *is ) runBuf->next = fsmRun->consumeBuf; fsmRun->consumeBuf = runBuf; - int lenCopied = 0; - int total = 0; - is->funcs->getData( fsmRun, is, 0, runBuf->data, length, &lenCopied ); - total += lenCopied; - while ( total < length ) { - is->funcs->getData( fsmRun, is, total, runBuf->data+total, length-total, &lenCopied ); - total += lenCopied; - } + int total = is->funcs->getData( fsmRun, is, 0, runBuf->data, length ); + while ( total < length ) + total += is->funcs->getData( fsmRun, is, total, runBuf->data+total, length-total ); is->funcs->consumeData( is, length ); |