From 8baf7e1e75a185c742dc6d5b27e50058635e5522 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Mon, 10 May 2010 03:31:08 +0000 Subject: Added the new QueueBuf. It's brilliant, and I've wanted it for a long time. ...I mean brilliant as in cool. --- src/queuebuf.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/queuebuf.h (limited to 'src/queuebuf.h') diff --git a/src/queuebuf.h b/src/queuebuf.h new file mode 100644 index 0000000..3591959 --- /dev/null +++ b/src/queuebuf.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2007-2010 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. + */ + +#ifndef BU_QUEUE_BUF_H +#define BU_QUEUE_BUF_H + +#include "bu/stream.h" + +namespace Bu +{ + /** + * A queuing buffer stream class. All data written to this class is + * appended to it, there is no stored position. All data read is read + * from the begining and then thrown away. It operates by using a linked + * list of small buffers, and deallocating or reusing them when it can. + */ + class QueueBuf : public Bu::Stream + { + public: + QueueBuf( int iBlockSize=256 ); + virtual ~QueueBuf(); + + int getSize(); + + virtual void close(); + virtual size_t read( void *pBuf, size_t nBytes ); + virtual size_t peek( void *pBuf, size_t nBytes ); + virtual size_t write( const void *pBuf, size_t nBytes ); + virtual long tell(); + virtual void seek( long offset ); + virtual void setPos( long pos ); + virtual void setPosEnd( long pos ); + virtual bool isEos(); + virtual bool isOpen(); + virtual void flush(); + virtual bool canRead(); + virtual bool canWrite(); + virtual bool isReadable(); + virtual bool isWritable(); + virtual bool isSeekable(); + virtual bool isBlocking(); + virtual void setBlocking( bool bBlocking=true ); + + private: + void addBlock(); + void removeBlock(); + + private: + int iBlockSize; + int iReadOffset; + int iWriteOffset; + size_t iTotalSize; + typedef Bu::List BlockList; + BlockList lBlocks; + }; +}; + +#endif -- cgit v1.2.3