From d872f7e07c5367f251cf5ebb70a03916251f5306 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Wed, 1 Oct 2008 16:46:32 +0000 Subject: Ok, NIDS is getting better and better, and I went ahead and cleaned up some exception related code that's been annoying me. You should no longer have to include any exception header explicitly for normal operations, every class that has it's own exception to throw defines it in it's own headers. This may break some code that uses libbu++, but it's an easy fix, just delete the include for exceptions.h. Sometime soon I would also like to move from Bu::ExceptionBase to Bu::Exception, but that will affect a lot more code than this change did. --- src/nidsstream.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 9 deletions(-) (limited to 'src/nidsstream.cpp') diff --git a/src/nidsstream.cpp b/src/nidsstream.cpp index 2f24d69..740dc1f 100644 --- a/src/nidsstream.cpp +++ b/src/nidsstream.cpp @@ -1,20 +1,41 @@ #include "bu/nidsstream.h" -Bu::NidsStream::NidsStream( Nids &rNids ) : +Bu::NidsStream::NidsStream( Nids &rNids, uint32_t uStream ) : rNids( rNids ), - iPos( 0 ) + uStream( uStream ), + pCurBlock( NULL ), + uCurBlock( uStream ), + uSize( 0 ), + uBlockSize( rNids.iBlockSize-sizeof(Nids::Block) ), + uPos( 0 ) { + printf("NidsStream::allocated\n"); + pCurBlock = rNids.newBlock(); + rNids.getBlock( uStream, pCurBlock ); + uSize = pCurBlock->uBytesUsed; } +/* Bu::NidsStream::NidsStream( const Bu::NidsStream &rSrc ) : + Stream( rSrc ), rNids( rSrc.rNids ), - iPos( 0 ) -{ - -} + uStream( rSrc.uStream ), + pCurBlock( NULL ), + uCurBlock( uStream ), + uSize( 0 ), + uBlockSize( rSrc.uBlockSize ), + iUsable( uBlockSize-sizeof(Nids::Block) ), + uPos( 0 ) +{ + printf("NidsStream::copied\n"); + pCurBlock = rNids.newBlock(); + rNids.getBlock( uStream, pCurBlock ); +}*/ Bu::NidsStream::~NidsStream() { + rNids.updateStreamSize( uStream, uSize ); + rNids.deleteBlock( pCurBlock ); } void Bu::NidsStream::close() @@ -23,29 +44,85 @@ void Bu::NidsStream::close() size_t Bu::NidsStream::read( void *pBuf, size_t nBytes ) { + if( uPos%uBlockSize+nBytes < uBlockSize ) + { + size_t iRead = nBytes; + if( iRead > pCurBlock->uBytesUsed ) + iRead = pCurBlock->uBytesUsed; + memcpy( pBuf, pCurBlock->pData+(uPos%uBlockSize), iRead ); + uPos += nBytes; + printf("a: block %u = %ub (%ub total)\n", + uCurBlock, pCurBlock->uBytesUsed, uSize ); + return iRead; + } + else + { + //size_t iTotal = 0; + for(;;) + { + + } + } return 0; } size_t Bu::NidsStream::write( const void *pBuf, size_t nBytes ) { - return 0; + if( uPos%uBlockSize+nBytes < uBlockSize ) + { + memcpy( pCurBlock->pData+(uPos%uBlockSize), pBuf, nBytes ); + pCurBlock->uBytesUsed += nBytes; + rNids.setBlock( uCurBlock, pCurBlock ); + uPos += nBytes; + uSize += nBytes; + printf("a: block %u = %ub (%ub total)\n", + uCurBlock, pCurBlock->uBytesUsed, uSize ); + return nBytes; + } + else + { + size_t nTotal = 0; + for(;;) + { + uint32_t uNow = uBlockSize-(uPos%uBlockSize); + if( nBytes < uNow ) + uNow = nBytes; + memcpy( pCurBlock->pData+(uPos%uBlockSize), + &((char *)pBuf)[nTotal], uNow ); + pCurBlock->uBytesUsed += uNow; + rNids.setBlock( uCurBlock, pCurBlock ); + uSize += uNow; + uPos += uNow; + nTotal += uNow; + nBytes -= uNow; + printf("b: block %u = %ub (%ub total)\n", + uCurBlock, pCurBlock->uBytesUsed, uSize ); + if( nBytes == 0 ) + return nTotal; + if( pCurBlock->uBytesUsed == uBlockSize ) + uCurBlock = rNids.getNextBlock( uCurBlock, pCurBlock ); + } + } } long Bu::NidsStream::tell() { - return 0; + return uPos; } void Bu::NidsStream::seek( long offset ) { + uPos += offset; } void Bu::NidsStream::setPos( long pos ) { + uPos = pos; } void Bu::NidsStream::setPosEnd( long pos ) { + uPos = uSize-pos-1; } bool Bu::NidsStream::isEOS() @@ -92,7 +169,7 @@ bool Bu::NidsStream::isBlocking() return true; } -void Bu::NidsStream::setBlocking( bool bBlocking ) +void Bu::NidsStream::setBlocking( bool /*bBlocking*/ ) { } -- cgit v1.2.3