1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-07 19:18:19 +02:00
Beef/BeefySysLib/DataStream.h
2025-03-28 08:08:33 -04:00

83 lines
1.8 KiB
C++

#pragma once
#include "Common.h"
NS_BF_BEGIN;
class DataStream
{
public:
bool mBigEndian;
int mBitPos;
uint32 mCurBitInt;
int mReadBitIntPos; // in bits
protected:
uint32 GetBitInt(int bitPos);
public:
DataStream();
virtual ~DataStream() {}
virtual bool Eof() = 0;
virtual int GetSize() = 0;
virtual int Read(void* ptr, int size) = 0;
virtual int Write(void* ptr, int size) = 0;
virtual void WriteZeros(int size);
virtual void Align(int size);
virtual int GetPos() = 0;
virtual void Seek(int size) = 0;
virtual void SetPos(int pos) = 0;
virtual int8 ReadInt8();
virtual uint8 ReadUInt8();
virtual int16 ReadInt16();
virtual uint16 ReadUInt16();
virtual int32 ReadInt32();
virtual int64 ReadInt64();
virtual float ReadFloat();
virtual double ReadDouble();
virtual String ReadAscii8SizedString();
virtual String ReadAscii32SizedString();
virtual String ReadUnicode32SizedString();
virtual String ReadSZ();
template <typename T>
void ReadT(const T& val)
{
Read((void*) &val, sizeof(T));
}
template <typename T>
T ReadT()
{
T val;
Read((void*)&val, sizeof(T));
return val;
}
virtual void Write(float val);
virtual void Write(uint8 val);
virtual void Write(int8 val);
virtual void Write(int16 val);
virtual void Write(int32 val);
virtual void Write(int64 val);
virtual void Write(const StringImpl& val);
virtual void Write(DataStream& refStream);
virtual void WriteSNZ(const StringImpl& val);
virtual void WriteSZ(const StringImpl& val);
template <typename T>
void WriteT(const T& val)
{
Write((void*)&val, sizeof(T));
}
virtual void SyncBitPos();
virtual void SyncBytePos();
virtual int ReadUBits(int bits);
virtual void SeekBits(int bits);
};
NS_BF_END;