#pragma once

#include "common/IDataStream.h"

class IBufferStream : public IDataStream
{
	public:
		IBufferStream();
		IBufferStream(const IBufferStream & rhs);
		IBufferStream(void * buf, UInt64 inLength);
		virtual ~IBufferStream();

		IBufferStream &	operator=(IBufferStream & rhs);

		void	SetBuffer(void * buf, UInt64 inLength);
		void *	GetBuffer(void)	{ return streamBuf; }

		void	OwnBuffer(void)		{ flags |= kFlag_OwnedBuf; }
		void	DisownBuffer(void)	{ flags &= ~kFlag_OwnedBuf; }

		// read
		virtual void	ReadBuf(void * buf, UInt32 inLength);

		// write
		virtual void	WriteBuf(const void * buf, UInt32 inLength);

	protected:
		UInt8	* streamBuf;
		UInt32	flags;

		enum
		{
			kFlag_OwnedBuf = 1 << 0
		};
};