enderalse/source/fs.dll/common/IBufferStream.cpp

59 lines
1.1 KiB
C++

#include "IBufferStream.h"
IBufferStream::IBufferStream()
:streamBuf(NULL), flags(0)
{
}
IBufferStream::IBufferStream(const IBufferStream & rhs)
{
// explicitly not supporting copy constructor for self-owned buffers
ASSERT((flags & kFlag_OwnedBuf) == 0);
}
IBufferStream::IBufferStream(void * buf, UInt64 inLength)
:streamBuf(NULL), flags(0)
{
SetBuffer(buf, inLength);
}
IBufferStream::~IBufferStream()
{
if(flags & kFlag_OwnedBuf)
{
delete [] streamBuf;
}
}
IBufferStream & IBufferStream::operator=(IBufferStream & rhs)
{
// explicitly not supporting copying for self-owned buffers
ASSERT((flags & kFlag_OwnedBuf) == 0);
streamBuf = rhs.streamBuf;
flags = rhs.flags;
return *this;
}
void IBufferStream::SetBuffer(void * buf, UInt64 inLength)
{
streamBuf = (UInt8 *)buf;
streamLength = inLength;
Rewind();
}
void IBufferStream::ReadBuf(void * buf, UInt32 inLength)
{
memcpy(buf, &streamBuf[streamOffset], inLength);
streamOffset += inLength;
}
void IBufferStream::WriteBuf(const void * buf, UInt32 inLength)
{
memcpy(&streamBuf[streamOffset], buf, inLength);
streamOffset += inLength;
}