#pragma once #include "Zone/Stream/IZoneStream.h" #include #include class IZoneInputStream : public IZoneStream { public: virtual void* Alloc(unsigned align) = 0; template T* Alloc(const unsigned align) { return static_cast(Alloc(align)); } virtual void LoadDataRaw(void* dst, size_t size) = 0; virtual void LoadDataInBlock(void* dst, size_t size) = 0; virtual void IncBlockPos(size_t size) = 0; virtual void LoadNullTerminated(void* dst) = 0; template void Load(T* dst) { LoadDataInBlock(const_cast(reinterpret_cast(dst)), sizeof(T)); } template void Load(T* dst, const size_t count) { LoadDataInBlock(const_cast(reinterpret_cast(dst)), count * sizeof(T)); } template void LoadPartial(T* dst, const size_t size) { LoadDataInBlock(const_cast(reinterpret_cast(dst)), size); } virtual void** InsertPointer() = 0; template T** InsertPointer() { return reinterpret_cast(InsertPointer()); } virtual void* ConvertOffsetToPointer(const void* offset) = 0; template T* ConvertOffsetToPointer(T* offset) { return static_cast(ConvertOffsetToPointer(static_cast(offset))); } virtual void* ConvertOffsetToAlias(const void* offset) = 0; template T* ConvertOffsetToAlias(T* offset) { return static_cast(ConvertOffsetToAlias(static_cast(offset))); } };