From 469bbcf0701e1eb8a6670c23145b0da87357e178 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Sun, 25 Mar 2012 20:00:08 +0000 Subject: Code is all reorganized. We're about ready to release. I should write up a little explenation of the arrangement. --- src/buffer.cpp | 168 --------------------------------------------------------- 1 file changed, 168 deletions(-) delete mode 100644 src/buffer.cpp (limited to 'src/buffer.cpp') diff --git a/src/buffer.cpp b/src/buffer.cpp deleted file mode 100644 index 47fab70..0000000 --- a/src/buffer.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2007-2011 Xagasoft, All rights reserved. - * - * This file is part of the libbu++ library and is released under the - * terms of the license contained in the file LICENSE. - */ - -#include "bu/buffer.h" - -Bu::Buffer::Buffer( Bu::Stream &rNext, int iWhat, int iBufSize ) : - Bu::Filter( rNext ), - sSoFar( 0 ), - iBufSize( iBufSize ), - sReadBuf( NULL ), - sWriteBuf( NULL ), - iReadBufFill( 0 ), - iReadPos( 0 ), - iWriteBufFill( 0 ), - iWritePos( 0 ), - iWhat( iWhat ) -{ - sReadBuf = new char[iBufSize]; - sWriteBuf = new char[iBufSize]; -} - -Bu::Buffer::~Buffer() -{ - delete[] sReadBuf; - delete[] sWriteBuf; -} - -void Bu::Buffer::start() -{ -} - -Bu::size Bu::Buffer::stop() -{ - iReadBufFill = iReadPos = iWriteBufFill = iWritePos = 0; - return sSoFar; -} - -void Bu::Buffer::fillReadBuf() -{ - if( iReadBufFill+iReadPos < iBufSize ) - { - iReadBufFill += rNext.read( - sReadBuf+iReadPos+iReadBufFill, - iBufSize-iReadBufFill-iReadPos - ); - } -} - -Bu::size Bu::Buffer::read( void *pBuf, Bu::size nBytes ) -{ - if( (iWhat&Read) == 0 ) - return rNext.read( pBuf, nBytes ); - - if( nBytes <= 0 ) - { - fillReadBuf(); - return 0; - } - - Bu::size nTotRead = 0; -// fillReadBuf(); - - do - { - int iAmnt = nBytes-nTotRead; - if( iAmnt > iReadBufFill ) - { - iAmnt = iReadBufFill; - } - if( iAmnt > 0 ) - { - memcpy( ((char *)pBuf)+nTotRead, sReadBuf+iReadPos, iAmnt ); - iReadPos += iAmnt; - nTotRead += iAmnt; - iReadBufFill -= iAmnt; - } - if( iReadBufFill == 0 ) - { - iReadPos = 0; - fillReadBuf(); - } - } - while( nTotRead < nBytes && iReadBufFill > 0 ); - - //printf("Buffer: %db returned, %db remain in buffer.\n", nTotRead, iReadBufFill ); - - return nTotRead; -} - -Bu::size Bu::Buffer::write( const void *pBuf, Bu::size nBytes ) -{ - if( (iWhat&Write) == 0 ) - return rNext.write( pBuf, nBytes ); - - Bu::size nTotWrote = 0; - - do - { - int iAmnt = nBytes-nTotWrote; - if( iAmnt > iBufSize-iWritePos-iWriteBufFill ) - { - iAmnt = iBufSize-iWritePos-iWriteBufFill; - } - if( iAmnt > 0 ) - { - memcpy( - sWriteBuf+iWritePos+iWriteBufFill, - ((char *)pBuf)+nTotWrote, - iAmnt - ); - nTotWrote += iAmnt; - iWriteBufFill += iAmnt; - //printf("Buffer: Moved %db to write buffer, %db filled now.\n", - //iAmnt, iWriteBufFill ); - } - while( iWritePos+iWriteBufFill == iBufSize ) - { - //printf("iWritePos = %d\n", iWritePos ); - int iWr = rNext.write( sWriteBuf+iWritePos, iWriteBufFill ); - //printf("Buffer: Wrote %db from buffer to stream, %db filled now.\n", iWr, iWriteBufFill-iWr ); - if( iWr == 0 ) - { - return nTotWrote; - } - else if( iWr == iWriteBufFill ) - { - iWritePos = iWriteBufFill = 0; - } - else - { - iWritePos += iWr; - iWriteBufFill -= iWr; - } - } - } - while( nTotWrote < nBytes && iWriteBufFill < iBufSize+iWritePos ); - - return nTotWrote; -} - -void Bu::Buffer::flush() -{ - if( (iWhat&Write) == 0 ) - return rNext.flush(); - - if( iWriteBufFill > 0 ) - { - //printf("Buffer: Flushing remaining data, %db.\n", iWriteBufFill ); - int iWr = 0; - do - { - iWr = rNext.write( sWriteBuf+iWritePos, iWriteBufFill ); - //printf("Buffer: %db written to stream.\n", iWr ); - iWritePos += iWr; - iWriteBufFill -= iWr; - } while( iWriteBufFill > 0 && iWr > 0 ); - } -} - -bool Bu::Buffer::isEos() -{ - return (iReadPos >= (iReadBufFill-1)) && (rNext.isEos()); -} - -- cgit v1.2.3