Files
TEngine/UnityProject/Packages/com.code-philosophy.obfuz4hybridclr/Templates~/MetadataReader.h.tpl
2025-07-26 08:10:41 +08:00

96 lines
2.0 KiB
Smarty

#pragma once
#include "MetadataUtil.h"
namespace hybridclr
{
namespace metadata
{
struct ByteSpan
{
const byte* data;
uint32_t length;
ByteSpan() : data(nullptr), length(0) {}
ByteSpan(const byte* data, uint32_t length) : data(data), length(length) {}
};
class MetadataReader
{
private:
const byte* _data;
public:
MetadataReader(const byte* data) : _data(data) {}
int16_t ReadInt16()
{
int16_t value = GetI2LittleEndian(_data);
_data += 2;
return value;
}
bool ReadBool()
{
return *(_data++) != 0;
}
uint8_t ReadUInt8()
{
return *(_data++);
}
uint16_t ReadUInt16()
{
uint16_t value = GetU2LittleEndian(_data);
_data += 2;
return value;
}
int32_t ReadInt32()
{
int32_t value = GetI4LittleEndian(_data);
_data += 4;
return value;
}
uint32_t ReadUInt32()
{
uint32_t value = GetU4LittleEndian(_data);
_data += 4;
return value;
}
int64_t ReadInt64()
{
int64_t value = GetI8LittleEndian(_data);
_data += 8;
return value;
}
uint64_t ReadUInt64()
{
uint64_t value = GetU8LittleEndian(_data);
_data += 8;
return value;
}
const byte* ReadFixedBytes(int32_t byteCount)
{
const byte* value = _data;
_data += byteCount;
return value;
}
ByteSpan ReadBytes()
{
uint32_t byteCount = ReadUInt32();
const byte* buffer = _data;
_data += byteCount;
return ByteSpan(buffer, byteCount);
}
const byte* CurrentDataPtr() const
{
return _data;
}
};
}
}