Files
LibCommon/Source/Common/FileIO/CMemoryOutStream.cpp
T
Lioncache baf3acc098 FileIO: Make use of std::byteswap
We can make all of the IOUtils helpers obsolete.
2025-12-23 16:55:11 -05:00

109 lines
1.8 KiB
C++

#include "CMemoryOutStream.h"
CMemoryOutStream::CMemoryOutStream() = default;
CMemoryOutStream::CMemoryOutStream(void *pData, uint32 Size, std::endian DataEndianness)
{
SetData(pData, Size, DataEndianness);
}
CMemoryOutStream::~CMemoryOutStream() = default;
void CMemoryOutStream::SetData(void *pData, uint32 Size, std::endian DataEndianness)
{
mpDataStart = (char*) pData;
mDataSize = Size;
mPos = 0;
mUsed = 0;
mDataEndianness = DataEndianness;
}
void CMemoryOutStream::WriteBytes(const void *pkSrc, uint32 Count)
{
if (!IsValid()) return;
memcpy(mpDataStart + mPos, pkSrc, Count);
mPos += Count;
if (mPos > mUsed)
mUsed = mPos;
}
bool CMemoryOutStream::Seek(int32 Offset, uint32 Origin)
{
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;
}
uint32 CMemoryOutStream::Tell() const
{
return mPos;
}
bool CMemoryOutStream::EoF() const
{
return (mPos >= mDataSize);
}
bool CMemoryOutStream::IsValid() const
{
return (mpDataStart != nullptr);
}
uint32 CMemoryOutStream::Size() const
{
return mDataSize;
}
uint32 CMemoryOutStream::SpaceUsed() const
{
return mUsed;
}
void CMemoryOutStream::SetSize(uint32 Size)
{
mDataSize = Size;
if (mPos > mDataSize)
mPos = mDataSize;
}
void* CMemoryOutStream::Data() const
{
return mpDataStart;
}
void* CMemoryOutStream::DataAtPosition() const
{
return mpDataStart + mPos;
}