16 explicit ResourceReader(
const std::vector<uint8_t>& bytes) : mBytes(bytes) {
17 if (bytes.size() < 0x40) {
18 throw std::runtime_error(
"the resource is under 64 bytes");
20 mSwap = (bytes[0] == (uint8_t)Torch::Endianness::Big) != (Torch::Endianness::Native == Torch::Endianness::Big);
23 template <
typename T>
void Read(T& value) {
24 if (mBytes.size() - mAt <
sizeof(T)) {
25 throw std::runtime_error(
"the resource ends early");
27 for (
size_t i = 0; i <
sizeof(T); i++) {
28 ((uint8_t*)&value)[mSwap ?
sizeof(T) - 1 - i : i] = mBytes[mAt + i];
33 template <
typename T> T Read() {
39 template <
typename T>
void ReadArray(T* values,
size_t count) {
40 for (
size_t i = 0; i < count; i++) {
45 std::vector<uint8_t> Bytes(
size_t size) {
46 if (mBytes.size() - mAt < size) {
47 throw std::runtime_error(
"the resource ends early");
50 return std::vector<uint8_t>(mBytes.begin() + (mAt - size), mBytes.begin() + mAt);
54 const std::vector<uint8_t>& mBytes;