2018-12-08 23:44:41 -07:00
|
|
|
#include "CMemoryOutStream.h"
|
|
|
|
|
|
2020-06-11 11:26:46 -04:00
|
|
|
CMemoryOutStream::CMemoryOutStream() = default;
|
2018-12-08 23:44:41 -07:00
|
|
|
|
2025-12-23 14:15:09 -05:00
|
|
|
CMemoryOutStream::CMemoryOutStream(void *pData, uint32 Size, std::endian DataEndianness)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
SetData(pData, Size, DataEndianness);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-11 11:26:46 -04:00
|
|
|
CMemoryOutStream::~CMemoryOutStream() = default;
|
2018-12-08 23:44:41 -07:00
|
|
|
|
2025-12-23 14:15:09 -05:00
|
|
|
void CMemoryOutStream::SetData(void *pData, uint32 Size, std::endian DataEndianness)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
mpDataStart = (char*) pData;
|
|
|
|
|
mDataSize = Size;
|
|
|
|
|
mPos = 0;
|
|
|
|
|
mUsed = 0;
|
|
|
|
|
mDataEndianness = DataEndianness;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-09 02:38:38 -07:00
|
|
|
void CMemoryOutStream::WriteBytes(const void *pkSrc, uint32 Count)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
if (!IsValid()) return;
|
|
|
|
|
|
|
|
|
|
memcpy(mpDataStart + mPos, pkSrc, Count);
|
|
|
|
|
mPos += Count;
|
2025-12-23 14:15:09 -05:00
|
|
|
if (mPos > mUsed)
|
|
|
|
|
mUsed = mPos;
|
2018-12-08 23:44:41 -07:00
|
|
|
}
|
|
|
|
|
|
2018-12-09 02:38:38 -07:00
|
|
|
bool CMemoryOutStream::Seek(int32 Offset, uint32 Origin)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
if (!IsValid()) return false;
|
|
|
|
|
|
|
|
|
|
switch (Origin)
|
|
|
|
|
{
|
|
|
|
|
case SEEK_SET:
|
|
|
|
|
mPos = Offset;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SEEK_CUR:
|
|
|
|
|
mPos += Offset;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SEEK_END:
|
|
|
|
|
mPos = mDataSize - Offset;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mPos < 0)
|
|
|
|
|
{
|
|
|
|
|
mPos = 0;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mPos > mDataSize)
|
|
|
|
|
{
|
|
|
|
|
mPos = mDataSize;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-09 02:38:38 -07:00
|
|
|
uint32 CMemoryOutStream::Tell() const
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
return mPos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CMemoryOutStream::EoF() const
|
|
|
|
|
{
|
|
|
|
|
return (mPos >= mDataSize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CMemoryOutStream::IsValid() const
|
|
|
|
|
{
|
|
|
|
|
return (mpDataStart != nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-09 02:38:38 -07:00
|
|
|
uint32 CMemoryOutStream::Size() const
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
return mDataSize;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-09 02:38:38 -07:00
|
|
|
uint32 CMemoryOutStream::SpaceUsed() const
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
return mUsed;
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-09 02:38:38 -07:00
|
|
|
void CMemoryOutStream::SetSize(uint32 Size)
|
2018-12-08 23:44:41 -07:00
|
|
|
{
|
|
|
|
|
mDataSize = Size;
|
|
|
|
|
if (mPos > mDataSize)
|
|
|
|
|
mPos = mDataSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void* CMemoryOutStream::Data() const
|
|
|
|
|
{
|
|
|
|
|
return mpDataStart;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void* CMemoryOutStream::DataAtPosition() const
|
|
|
|
|
{
|
|
|
|
|
return mpDataStart + mPos;
|
|
|
|
|
}
|