diff --git a/xwords4/common/memstream.c b/xwords4/common/memstream.c index 569a04395..d747e49b9 100644 --- a/xwords4/common/memstream.c +++ b/xwords4/common/memstream.c @@ -292,8 +292,8 @@ mem_stream_putBits( XWStreamCtxt* p_sctx, XP_U16 nBits, XP_U32 data } /* mem_stream_putBits */ static void -mem_stream_copyFromStream( XWStreamCtxt* p_sctx, XWStreamCtxt* src, - XP_U16 nBytes ) +mem_stream_getFromStream( XWStreamCtxt* p_sctx, XWStreamCtxt* src, + XP_U16 nBytes ) { while ( nBytes > 0 ) { XP_U8 buf[256]; @@ -305,7 +305,7 @@ mem_stream_copyFromStream( XWStreamCtxt* p_sctx, XWStreamCtxt* src, stream_putBytes( p_sctx, buf, len ); nBytes -= len; } -} /* mem_stream_copyFromStream */ +} /* mem_stream_getFromStream */ static void mem_stream_open( XWStreamCtxt* p_sctx ) @@ -396,8 +396,9 @@ mem_stream_getPos( XWStreamCtxt* p_sctx, PosWhich which ) } /* mem_stream_getPos */ static XWStreamPos -mem_stream_setPos( XWStreamCtxt* p_sctx, XWStreamPos newpos, PosWhich which ) +mem_stream_setPos( XWStreamCtxt* p_sctx, PosWhich which, XWStreamPos newpos ) { + XP_ASSERT( END_OF_STREAM != newpos ); /* not handling this yet */ MemStreamCtxt* stream = (MemStreamCtxt*)p_sctx; XWStreamPos oldPos = mem_stream_getPos( p_sctx, which ); @@ -448,7 +449,7 @@ make_vtable( MemStreamCtxt* stream ) SET_VTABLE_ENTRY( vtable, stream_putU32, mem ); SET_VTABLE_ENTRY( vtable, stream_putBits, mem ); - SET_VTABLE_ENTRY( vtable, stream_copyFromStream, mem ); + SET_VTABLE_ENTRY( vtable, stream_getFromStream, mem ); SET_VTABLE_ENTRY( vtable, stream_setPos, mem ); SET_VTABLE_ENTRY( vtable, stream_getPos, mem ); diff --git a/xwords4/common/movestak.c b/xwords4/common/movestak.c index c7333cb25..0caade170 100644 --- a/xwords4/common/movestak.c +++ b/xwords4/common/movestak.c @@ -100,7 +100,7 @@ stack_loadFromStream( StackCtxt* stack, XWStreamCtxt* stream ) NULL, 0, (MemStreamCloseCallback)NULL ); - stream_copyFromStream( stack->data, stream, nBytes ); + stream_getFromStream( stack->data, stream, nBytes ); } else { XP_ASSERT( stack->nEntries == 0 ); XP_ASSERT( stack->top == 0 ); @@ -115,7 +115,7 @@ stack_writeToStream( const StackCtxt* stack, XWStreamCtxt* stream ) XWStreamPos oldPos = START_OF_STREAM; if ( !!data ) { - oldPos = stream_setPos( data, START_OF_STREAM, POS_READ ); + oldPos = stream_setPos( data, POS_READ, START_OF_STREAM ); nBytes = stream_getSize( data ); } else { nBytes = 0; @@ -128,13 +128,13 @@ stack_writeToStream( const StackCtxt* stack, XWStreamCtxt* stream ) stream_putU16( stream, stack->nEntries ); stream_putU32( stream, stack->top ); - stream_setPos( data, START_OF_STREAM, POS_READ ); - stream_copyFromStream( stream, data, nBytes ); + stream_setPos( data, POS_READ, START_OF_STREAM ); + stream_getFromStream( stream, data, nBytes ); } if ( !!data ) { /* in case it'll be used further */ - (void)stream_setPos( data, oldPos, POS_READ ); + (void)stream_setPos( data, POS_READ, oldPos ); } } /* stack_writeToStream */ @@ -167,7 +167,7 @@ pushEntry( StackCtxt* stack, const StackEntry* entry ) stack->data = stream; } - oldLoc = stream_setPos( stream, stack->top, POS_WRITE ); + oldLoc = stream_setPos( stream, POS_WRITE, stack->top ); stream_putBits( stream, 2, entry->moveType ); stream_putBits( stream, 2, entry->playerNum ); @@ -211,7 +211,7 @@ pushEntry( StackCtxt* stack, const StackEntry* entry ) ++stack->nEntries; stack->highWaterMark = stack->nEntries; - stack->top = stream_setPos( stream, oldLoc, POS_WRITE ); + stack->top = stream_setPos( stream, POS_WRITE, oldLoc ); } /* pushEntry */ static void @@ -327,7 +327,7 @@ setCacheReadyFor( StackCtxt* stack, XP_U16 n ) StackEntry dummy; XP_U16 i; - stream_setPos( stack->data, START_OF_STREAM, POS_READ ); + stream_setPos( stack->data, POS_READ, START_OF_STREAM ); for ( i = 0; i < n; ++i ) { readEntry( stack, &dummy ); } @@ -360,13 +360,13 @@ stack_getNthEntry( StackCtxt* stack, XP_U16 n, StackEntry* entry ) } if ( found ) { - XWStreamPos oldPos = stream_setPos( stack->data, stack->cachedPos, - POS_READ ); + XWStreamPos oldPos = stream_setPos( stack->data, POS_READ, + stack->cachedPos ); readEntry( stack, entry ); entry->moveNum = (XP_U8)n; - stack->cachedPos = stream_setPos( stack->data, oldPos, POS_READ ); + stack->cachedPos = stream_setPos( stack->data, POS_READ, oldPos ); ++stack->cacheNext; } diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 7488b5b9b..4d0d3d550 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -339,7 +339,7 @@ readStreamIf( ServerCtxt* server, XWStreamCtxt* in ) XP_U16 len = stream_getU16( in ); if ( 0 < len ) { result = mkServerStream( server ); - stream_copyFromStream( result, in, len ); + stream_getFromStream( result, in, len ); } return result; } @@ -350,7 +350,9 @@ writeStreamIf( XWStreamCtxt* dest, XWStreamCtxt* src ) XP_U16 len = !!src ? stream_getSize( src ) : 0; stream_putU16( dest, len ); if ( 0 < len ) { - stream_copyFromStream( dest, src, len ); + XWStreamPos pos = stream_getPos( src, POS_READ ); + stream_getFromStream( dest, src, len ); + (void)stream_setPos( src, POS_READ, pos ); } } @@ -430,7 +432,6 @@ server_writeToStream( ServerCtxt* server, XWStreamCtxt* stream ) writeStreamIf( stream, server->nv.prevMoveStream ); writeStreamIf( stream, server->nv.prevWordsStream ); - } /* server_writeToStream */ static void diff --git a/xwords4/common/xwstream.h b/xwords4/common/xwstream.h index 32a72f8f5..3bc240fce 100644 --- a/xwords4/common/xwstream.h +++ b/xwords4/common/xwstream.h @@ -26,8 +26,8 @@ #define START_OF_STREAM 0 #define END_OF_STREAM -1 - typedef XP_U32 XWStreamPos; /* low 3 bits are bit offset; rest byte offset */ + enum { POS_READ, POS_WRITE }; typedef XP_U8 PosWhich; @@ -58,12 +58,12 @@ typedef struct StreamCtxVTable { void (*m_stream_putBits)( XWStreamCtxt* dctx, XP_U16 nBits, XP_U32 bits DBG_LINE_FILE_FORMAL ); - void (*m_stream_copyFromStream)( XWStreamCtxt* dctx, XWStreamCtxt* src, + void (*m_stream_getFromStream)( XWStreamCtxt* dctx, XWStreamCtxt* src, XP_U16 nBytes ); XWStreamPos (*m_stream_getPos)( XWStreamCtxt* dctx, PosWhich which ); - XWStreamPos (*m_stream_setPos)( XWStreamCtxt* dctx, XWStreamPos newpos, - PosWhich which ); + XWStreamPos (*m_stream_setPos)( XWStreamCtxt* dctx, PosWhich which, + XWStreamPos newpos ); void (*m_stream_open)( XWStreamCtxt* dctx ); void (*m_stream_close)( XWStreamCtxt* dctx ); @@ -127,8 +127,8 @@ struct XWStreamCtxt { #define stream_putBits(sc, n, b) \ (sc)->vtable->m_stream_putBits((sc), (n), (b) DBG_LINE_FILE_PARM ) -#define stream_copyFromStream( sc, src, nb ) \ - (sc)->vtable->m_stream_copyFromStream((sc), (src), (nb)) +#define stream_getFromStream( sc, src, nb ) \ + (sc)->vtable->m_stream_getFromStream((sc), (src), (nb)) #define stream_getPos(sc, w) \ (sc)->vtable->m_stream_getPos((sc), (w))