PrimeWorldEditor/src/FileIO/IInputStream.cpp

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();
}