From 229456ced559a79c14d4e7fd80e98393551624dc Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 24 Oct 2024 17:39:23 +0300 Subject: [PATCH] add ByteReader.get(dst, size) method --- src/coders/byte_utils.cpp | 8 ++++++++ src/coders/byte_utils.hpp | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/coders/byte_utils.cpp b/src/coders/byte_utils.cpp index 380c932c..e30c14f2 100644 --- a/src/coders/byte_utils.cpp +++ b/src/coders/byte_utils.cpp @@ -107,6 +107,14 @@ void ByteReader::checkMagic(const char* data, size_t size) { pos += size; } +void ByteReader::get(char* dst, size_t size) { + if (pos + size > this->size) { + throw std::runtime_error("buffer underflow"); + } + std::memcpy(dst, data+pos, size); + pos += size; +} + ubyte ByteReader::get() { if (pos == size) { throw std::runtime_error("buffer underflow"); diff --git a/src/coders/byte_utils.hpp b/src/coders/byte_utils.hpp index 103327c5..0532fe43 100644 --- a/src/coders/byte_utils.hpp +++ b/src/coders/byte_utils.hpp @@ -52,6 +52,8 @@ public: ByteReader(const ubyte* data); void checkMagic(const char* data, size_t size); + /// @brief Get N bytes + void get(char* dst, size_t size); /// @brief Read one byte (unsigned 8 bit integer) ubyte get(); /// @brief Read one byte (unsigned 8 bit integer) without pointer move