mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-22 09:05:44 +00:00
59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "Zone/Stream/IZoneStream.h"
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
|
|
class IZoneInputStream : public IZoneStream
|
|
{
|
|
public:
|
|
virtual void* Alloc(unsigned align) = 0;
|
|
|
|
template<typename T> T* Alloc(const unsigned align)
|
|
{
|
|
return static_cast<T*>(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<typename T> void Load(T* dst)
|
|
{
|
|
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), sizeof(T));
|
|
}
|
|
|
|
template<typename T> void Load(T* dst, const size_t count)
|
|
{
|
|
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), count * sizeof(T));
|
|
}
|
|
|
|
template<typename T> void LoadPartial(T* dst, const size_t size)
|
|
{
|
|
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), size);
|
|
}
|
|
|
|
virtual void** InsertPointer() = 0;
|
|
|
|
template<typename T> T** InsertPointer()
|
|
{
|
|
return reinterpret_cast<T**>(InsertPointer());
|
|
}
|
|
|
|
virtual void* ConvertOffsetToPointer(const void* offset) = 0;
|
|
|
|
template<typename T> T* ConvertOffsetToPointer(T* offset)
|
|
{
|
|
return static_cast<T*>(ConvertOffsetToPointer(static_cast<const void*>(offset)));
|
|
}
|
|
|
|
virtual void* ConvertOffsetToAlias(const void* offset) = 0;
|
|
|
|
template<typename T> T* ConvertOffsetToAlias(T* offset)
|
|
{
|
|
return static_cast<T*>(ConvertOffsetToAlias(static_cast<const void*>(offset)));
|
|
}
|
|
};
|