39#include <boost/endian/conversion.hpp>
40#include <boost/type_traits/make_unsigned.hpp>
60template <
bool IsSaving>
71 void tag(
const char *) { }
119 const std::size_t actual =
bytes_.remove_prefix(
sizeof(
T));
120 good_ &= (actual ==
sizeof(
T));
121 if (actual ==
sizeof(
T))
123 std::memcpy(std::addressof(v),
bytes_.data() -
sizeof(
T),
sizeof(
T));
124 boost::endian::little_to_native_inplace(v);
132 const std::size_t actual =
bytes_.remove_prefix(len);
133 good_ &= (len == actual);
134 std::memcpy(
buf,
bytes_.data() - actual, actual);
146 auto current =
bytes_.cbegin();
149 current = std::min(current,
bytes_.cend());
150 bytes_ = {current, std::size_t(
bytes_.cend() - current)};
193 serialize_uint(
static_cast<typename boost::make_unsigned<T>::type
>(v));
198 for (
size_t i = 0; i <
sizeof(
T); i++) {
200 if (1 <
sizeof(
T)) v >>= 8;
218 typedef std::ostreambuf_iterator<char> it;
#define s(x, c)
Definition aesb.c:47
Non-owning sequence of data. Does not deep copy.
Definition span.h:55
#define const
Definition ipfrdr.c:80
const char * buf
Definition slow_memmem.cpp:73
unsigned char uint8_t
Definition stdint.h:124
bool good() const noexcept
Definition binary_archive.h:99
void begin_array(size_t &s)
Definition binary_archive.h:153
void end_string(const char *delimiter)
Definition binary_archive.h:163
void enable_varint_bug_backward_compatibility()
Definition binary_archive.h:170
bool eof() const noexcept
If implementing as std::istream, reset stream error state after peek() call.
Definition binary_archive.h:103
binary_archive(epee::span< const std::uint8_t > s)
Definition binary_archive.h:95
epee::span< const std::uint8_t > bytes_
Definition binary_archive.h:173
void delimit_array()
Definition binary_archive.h:159
void serialize_varint(T &v)
Definition binary_archive.h:138
void serialize_blob(void *buf, size_t len, const char *delimiter="")
Definition binary_archive.h:130
size_t remaining_bytes() const noexcept
Definition binary_archive.h:169
void read_variant_tag(variant_tag_type &t)
Definition binary_archive.h:165
void serialize_uvarint(T &v)
Definition binary_archive.h:144
bool good_
Definition binary_archive.h:175
void serialize_int(T &v)
Definition binary_archive.h:107
void end_array()
Definition binary_archive.h:160
bool varint_bug_backward_compatibility_
Definition binary_archive.h:176
void begin_string(const char *delimiter)
Definition binary_archive.h:162
void begin_array()
Definition binary_archive.h:158
std::size_t getpos() const noexcept
Definition binary_archive.h:104
void serialize_uint(T &v)
serializes an unsigned integer
Definition binary_archive.h:117
std::uint8_t const *const begin_
Definition binary_archive.h:174
bool varint_bug_backward_compatibility_enabled() const
Definition binary_archive.h:171
void set_fail() noexcept
Definition binary_archive.h:100
std::streampos getpos() const
Definition binary_archive.h:188
bool varint_bug_backward_compatibility_enabled() const
Definition binary_archive.h:236
void end_string(const char *delimiter="\"")
Definition binary_archive.h:230
void serialize_blob(void *buf, size_t len, const char *delimiter="")
Definition binary_archive.h:204
void serialize_uvarint(T &v)
Definition binary_archive.h:216
stream_type & stream_
Definition binary_archive.h:238
void serialize_int(T v)
Definition binary_archive.h:191
binary_archive(stream_type &s)
Definition binary_archive.h:183
void begin_string(const char *delimiter="\"")
Definition binary_archive.h:229
void write_variant_tag(variant_tag_type t)
Definition binary_archive.h:232
void delimit_array()
Definition binary_archive.h:226
void end_array()
Definition binary_archive.h:227
std::ostream stream_type
Definition binary_archive.h:182
bool good() const
Definition binary_archive.h:185
void serialize_varint(T &v)
Definition binary_archive.h:210
void begin_array(size_t s)
Definition binary_archive.h:221
void serialize_uint(T v)
Definition binary_archive.h:196
void begin_array()
Definition binary_archive.h:225
void set_fail()
Definition binary_archive.h:186
uint8_t variant_tag_type
Definition binary_archive.h:66
void begin_object()
Definition binary_archive.h:72
boost::mpl::bool_< IsSaving > is_saving
Definition binary_archive.h:64
binary_archive_base< IsSaving > base_type
Definition binary_archive.h:63
binary_archive_base()
Definition binary_archive.h:68
void end_object()
Definition binary_archive.h:73
void end_variant()
Definition binary_archive.h:75
void begin_variant()
Definition binary_archive.h:74
void tag(const char *)
Definition binary_archive.h:71
Definition binary_archive.h:89
provides the implementation of varint's
#define DISABLE_VS_WARNINGS(w)
Definition warnings.h:18
#define POP_WARNINGS
Definition warnings.h:17
#define PUSH_WARNINGS
Definition warnings.h:16