mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-07-31 01:15:55 +00:00
103 lines
1.8 KiB
C++
103 lines
1.8 KiB
C++
#include "CMemoryInStream.h"
|
|
|
|
CMemoryInStream::CMemoryInStream()
|
|
{
|
|
mpDataStart = nullptr;
|
|
mDataSize = 0;
|
|
mPos = 0;
|
|
}
|
|
CMemoryInStream::CMemoryInStream(const void *pData, unsigned long Size, IOUtil::EEndianness DataEndianness)
|
|
{
|
|
SetData(pData, Size, DataEndianness);
|
|
}
|
|
|
|
CMemoryInStream::~CMemoryInStream()
|
|
{
|
|
}
|
|
|
|
void CMemoryInStream::SetData(const void *pData, unsigned long Size, IOUtil::EEndianness DataEndianness)
|
|
{
|
|
mpDataStart = static_cast<const char*>(pData);
|
|
mDataSize = Size;
|
|
mPos = 0;
|
|
mDataEndianness = DataEndianness;
|
|
}
|
|
|
|
void CMemoryInStream::ReadBytes(void *pDst, unsigned long Count)
|
|
{
|
|
if (!IsValid()) return;
|
|
memcpy(pDst, mpDataStart + mPos, Count);
|
|
mPos += Count;
|
|
}
|
|
|
|
bool CMemoryInStream::Seek(long Offset, long 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;
|
|
}
|
|
|
|
long CMemoryInStream::Tell() const
|
|
{
|
|
return mPos;
|
|
}
|
|
|
|
bool CMemoryInStream::EoF() const
|
|
{
|
|
return (mPos >= mDataSize);
|
|
}
|
|
|
|
bool CMemoryInStream::IsValid() const
|
|
{
|
|
return (mpDataStart != nullptr);
|
|
}
|
|
|
|
long CMemoryInStream::Size() const
|
|
{
|
|
return mDataSize;
|
|
}
|
|
|
|
void CMemoryInStream::SetSize(unsigned long Size)
|
|
{
|
|
mDataSize = Size;
|
|
if (mPos > mDataSize)
|
|
mPos = mDataSize;
|
|
}
|
|
|
|
const void* CMemoryInStream::Data() const
|
|
{
|
|
return mpDataStart;
|
|
}
|
|
|
|
const void* CMemoryInStream::DataAtPosition() const
|
|
{
|
|
return mpDataStart + mPos;
|
|
}
|