mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-07-31 01:15:55 +00:00
181 lines
3.1 KiB
C++
181 lines
3.1 KiB
C++
#include "IInputStream.h"
|
|
|
|
IInputStream::~IInputStream()
|
|
{
|
|
}
|
|
|
|
char IInputStream::ReadByte()
|
|
{
|
|
char Val;
|
|
ReadBytes(&Val, 1);
|
|
return Val;
|
|
}
|
|
|
|
short IInputStream::ReadShort()
|
|
{
|
|
short Val;
|
|
ReadBytes(&Val, 2);
|
|
if (mDataEndianness != IOUtil::kSystemEndianness) IOUtil::SwapBytes(Val);
|
|
return Val;
|
|
}
|
|
|
|
long IInputStream::ReadLong()
|
|
{
|
|
long Val;
|
|
ReadBytes(&Val, 4);
|
|
if (mDataEndianness != IOUtil::kSystemEndianness) IOUtil::SwapBytes(Val);
|
|
return Val;
|
|
}
|
|
|
|
long long IInputStream::ReadLongLong()
|
|
{
|
|
long long Val;
|
|
ReadBytes(&Val, 8);
|
|
if (mDataEndianness != IOUtil::kSystemEndianness) IOUtil::SwapBytes(Val);
|
|
return Val;
|
|
}
|
|
|
|
float IInputStream::ReadFloat()
|
|
{
|
|
float Val;
|
|
ReadBytes(&Val, 4);
|
|
if (mDataEndianness != IOUtil::kSystemEndianness) IOUtil::SwapBytes(Val);
|
|
return Val;
|
|
}
|
|
|
|
double IInputStream::ReadDouble()
|
|
{
|
|
double Val;
|
|
ReadBytes(&Val, 8);
|
|
if (mDataEndianness != IOUtil::kSystemEndianness) IOUtil::SwapBytes(Val);
|
|
return Val;
|
|
}
|
|
|
|
std::string IInputStream::ReadString()
|
|
{
|
|
std::string Str;
|
|
char c = 1;
|
|
|
|
while ((c != 0) && (!EoF()))
|
|
{
|
|
c = ReadByte();
|
|
if (c != 0) Str.push_back(c);
|
|
}
|
|
|
|
return Str;
|
|
}
|
|
|
|
std::string IInputStream::ReadString(unsigned long Count)
|
|
{
|
|
std::string Str(Count, 0);
|
|
|
|
for (unsigned long c = 0; c < Count; c++)
|
|
Str[c] = ReadByte();
|
|
|
|
return Str;
|
|
}
|
|
|
|
std::wstring IInputStream::ReadWString()
|
|
{
|
|
std::wstring WStr;
|
|
short c = 1;
|
|
|
|
while (c != 0)
|
|
{
|
|
c = ReadShort();
|
|
if (c != 0) WStr.push_back(c);
|
|
}
|
|
|
|
return WStr;
|
|
}
|
|
|
|
std::wstring IInputStream::ReadWString(unsigned long Count)
|
|
{
|
|
std::wstring WStr(Count, 0);
|
|
|
|
for (unsigned long c = 0; c < Count; c++)
|
|
WStr[c] = ReadShort();
|
|
|
|
return WStr;
|
|
}
|
|
|
|
|
|
char IInputStream::PeekByte()
|
|
{
|
|
char Val = ReadByte();
|
|
Seek(-1, SEEK_CUR);
|
|
return Val;
|
|
}
|
|
|
|
short IInputStream::PeekShort()
|
|
{
|
|
short Val = ReadShort();
|
|
Seek(-2, SEEK_CUR);
|
|
return Val;
|
|
}
|
|
|
|
long IInputStream::PeekLong()
|
|
{
|
|
long Val = ReadLong();
|
|
Seek(-4, SEEK_CUR);
|
|
return Val;
|
|
}
|
|
|
|
long long IInputStream::PeekLongLong()
|
|
{
|
|
long long Val = ReadLongLong();
|
|
Seek(-8, SEEK_CUR);
|
|
return Val;
|
|
}
|
|
|
|
float IInputStream::PeekFloat()
|
|
{
|
|
float Val = ReadFloat();
|
|
Seek(-4, SEEK_CUR);
|
|
return Val;
|
|
}
|
|
|
|
double IInputStream::PeekDouble()
|
|
{
|
|
double Val = ReadDouble();
|
|
Seek(-8, SEEK_CUR);
|
|
return Val;
|
|
}
|
|
|
|
void IInputStream::SeekToBoundary(unsigned long Boundary)
|
|
{
|
|
long Num = Boundary - (Tell() % Boundary);
|
|
if (Num == Boundary) return;
|
|
else Seek(Num, SEEK_CUR);
|
|
}
|
|
|
|
void IInputStream::SetEndianness(IOUtil::EEndianness Endianness)
|
|
{
|
|
mDataEndianness = Endianness;
|
|
}
|
|
|
|
void IInputStream::SetSourceString(const std::string& rkSource)
|
|
{
|
|
mDataSource = rkSource;
|
|
}
|
|
|
|
IOUtil::EEndianness IInputStream::GetEndianness() const
|
|
{
|
|
return mDataEndianness;
|
|
}
|
|
|
|
std::string IInputStream::GetSourceString() const
|
|
{
|
|
return mDataSource;
|
|
}
|
|
|
|
bool IInputStream::Seek64(long long Offset, long Origin)
|
|
{
|
|
return Seek((long) Offset, Origin);
|
|
}
|
|
|
|
long long IInputStream::Tell64() const
|
|
{
|
|
return (long long) Tell();
|
|
}
|