2#ifndef LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_DETAIL_MDBXBYTEIO_HPP_INCLUDED
3#define LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_DETAIL_MDBXBYTEIO_HPP_INCLUDED
21 m_out.push_back(value);
25 for (
int shift = 24; shift >= 0; shift -= 8) {
26 m_out.push_back(
static_cast<uint8_t
>((value >> shift) & 0xFFu));
31 for (
int shift = 56; shift >= 0; shift -= 8) {
32 m_out.push_back(
static_cast<uint8_t
>((value >> shift) & 0xFFu));
38 std::memcpy(&bits, &value,
sizeof(bits));
43 if (value.size() >
static_cast<size_t>((std::numeric_limits<uint32_t>::max)())) {
44 throw std::length_error(
"MdbxLogger: string field is too large");
46 write_u32(
static_cast<uint32_t
>(value.size()));
47 m_out.insert(
m_out.end(), value.begin(), value.end());
50 const std::vector<uint8_t>&
bytes()
const {
61 :
m_cur(static_cast<const uint8_t*>(data)),
62 m_end(static_cast<const uint8_t*>(data)) {
63 if (
m_cur ==
nullptr && size != 0) {
64 throw std::runtime_error(
"MdbxLogger: null serialized value");
77 for (
int i = 0; i < 4; ++i) {
78 value = (value << 8) | static_cast<uint32_t>(*
m_cur++);
86 for (
int i = 0; i < 8; ++i) {
87 value = (value << 8) | static_cast<uint64_t>(*
m_cur++);
95 std::memcpy(&value, &bits,
sizeof(value));
102 const char* begin =
reinterpret_cast<const char*
>(
m_cur);
104 return std::string(begin, size);
109 throw std::runtime_error(
"MdbxLogger: trailing bytes in serialized value");
118 if (
static_cast<size_t>(
m_end -
m_cur) < size) {
119 throw std::runtime_error(
"MdbxLogger: corrupted serialized value");
void require(size_t size) const
std::string read_string()
MdbxByteReader(const void *data, size_t size)
void write_u64(uint64_t value)
const std::vector< uint8_t > & bytes() const
void write_u32(uint32_t value)
void write_i64(int64_t value)
void write_string(const std::string &value)
void write_u8(uint8_t value)
std::vector< uint8_t > m_out
The primary namespace for the LogIt++ library.