7 #ifndef RETDEC_UNPACKER_DYNAMIC_BUFFER_H
8 #define RETDEC_UNPACKER_DYNAMIC_BUFFER_H
48 const std::vector<uint8_t>& data,
69 void erase(uint32_t startPos, uint32_t amount);
74 void forEach(
const std::function<
void(uint8_t&)>& func);
92 template <
typename T> T
read(
98 std::is_integral<T>::value,
99 "retdec::utils::DynamicBuffer::read can only accept integral types"
107 return readImpl<T>(pos, endianness);
110 std::string
readString(uint32_t pos, uint32_t maxLength = 0)
const;
133 std::is_integral<T>::value,
134 "retdec::utils::DynamicBuffer::write can only accept integral types"
158 uint32_t bytesToWrite =
sizeof(T);
162 if (bytesToWrite == 0)
167 _data.resize(pos + bytesToWrite);
169 for (uint32_t i = 0; i < bytesToWrite; ++i)
174 _data[pos + i] = (data >> (i << 3)) & 0xFF;
177 _data[pos + i] = (data >> ((bytesToWrite - i - 1) << 3)) & 0xFF;
190 if (pos >=
_data.size())
199 uint32_t bytesToRead =
sizeof(T);
207 for (uint32_t i = 0; i < bytesToRead; ++i)
212 ret |=
static_cast<uint64_t
>(
_data[pos + i]) << (i << 3);
215 ret |=
static_cast<uint64_t
>(
_data[pos + i]) << ((bytesToRead - i - 1) << 3);
Declaration of ByteValueStorage.
The class for dynamic buffered data manipulation taking the endianness of the data in account.
Definition: dynamic_buffer.h:36
uint32_t _capacity
Definition: dynamic_buffer.h:227
void writeRepeatingByte(uint8_t byte, uint32_t pos, uint32_t repeatAmount)
Definition: dynamic_buffer.cpp:254
void setCapacity(uint32_t capacity)
Definition: dynamic_buffer.cpp:112
void write(const T &data, uint32_t pos, retdec::utils::Endianness endianness=retdec::utils::Endianness::UNKNOWN)
Definition: dynamic_buffer.h:126
void writeImpl(const T &data, uint32_t pos, retdec::utils::Endianness endianness)
Definition: dynamic_buffer.h:148
uint32_t getRealDataSize() const
Definition: dynamic_buffer.cpp:156
T readImpl(uint32_t pos, retdec::utils::Endianness endianness) const
Definition: dynamic_buffer.h:185
uint32_t getCapacity() const
Definition: dynamic_buffer.cpp:123
void forEachReverse(const std::function< void(uint8_t &)> &func)
Definition: dynamic_buffer.cpp:213
void forEach(const std::function< void(uint8_t &)> &func)
Definition: dynamic_buffer.cpp:201
retdec::utils::Endianness getEndianness() const
Definition: dynamic_buffer.cpp:145
std::string readString(uint32_t pos, uint32_t maxLength=0) const
Definition: dynamic_buffer.cpp:234
void setEndianness(retdec::utils::Endianness endianness)
Definition: dynamic_buffer.cpp:135
const uint8_t * getRawBuffer() const
Definition: dynamic_buffer.cpp:191
T read(uint32_t pos, retdec::utils::Endianness endianness=retdec::utils::Endianness::UNKNOWN) const
Definition: dynamic_buffer.h:92
DynamicBuffer & operator=(DynamicBuffer dynamicBuffer)
Definition: dynamic_buffer.cpp:99
std::vector< uint8_t > _data
Definition: dynamic_buffer.h:225
retdec::utils::Endianness _endianness
Definition: dynamic_buffer.h:226
DynamicBuffer(retdec::utils::Endianness endianness=retdec::utils::Endianness::LITTLE)
Definition: dynamic_buffer.cpp:20
std::vector< uint8_t > getBuffer() const
Definition: dynamic_buffer.cpp:181
void erase(uint32_t startPos, uint32_t amount)
Definition: dynamic_buffer.cpp:167
Endianness
Definition: byte_value_storage.h:21
Definition: archive_wrapper.h:19