39 #include <boost/endian/conversion.hpp> 40 #include <boost/type_traits/make_unsigned.hpp> 60 template <
bool IsSaving>
71 void tag(
const char *) { }
96 :
base_type(), bytes_(
s), begin_(
s.begin()), good_(
true), varint_bug_backward_compatibility_(
false)
103 bool eof()
const noexcept {
return bytes_.empty(); }
104 std::size_t
getpos()
const noexcept {
return bytes_.begin() - begin_; }
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);
146 auto current = bytes_.cbegin();
147 auto end = bytes_.cend();
148 good_ &= (0 <= tools::read_varint(current, end, v));
149 current =
std::min(current, bytes_.cend());
150 bytes_ = {current, std::size_t(bytes_.cend() - current)};
185 bool good()
const {
return stream_.good(); }
186 void set_fail() { stream_.setstate(std::ios::failbit); }
188 std::streampos
getpos()
const {
return stream_.tellp(); }
198 for (
size_t i = 0;
i <
sizeof(
T);
i++) {
199 stream_.put((
char)(v & 0xff));
200 if (1 <
sizeof(
T)) v >>= 8;
206 stream_.write((
char *)
buf, len);
218 typedef std::ostreambuf_iterator<char> it;
uint8_t variant_tag_type
Definition: binary_archive.h:66
bool eof() const noexcept
If implementing as std::istream, reset stream error state after peek() call.
Definition: binary_archive.h:103
void write_variant_tag(variant_tag_type t)
Definition: binary_archive.h:232
void end_array()
Definition: binary_archive.h:160
void serialize_varint(T &v)
Definition: binary_archive.h:138
void serialize_uvarint(T &v)
Definition: binary_archive.h:144
const uint32_t T[512]
Definition: groestl_tables.h:36
PUSH_WARNINGS
Definition: hash-ops.h:53
bool good_
Definition: binary_archive.h:175
void serialize_blob(void *buf, size_t len, const char *delimiter="")
Definition: binary_archive.h:204
void read_variant_tag(variant_tag_type &t)
Definition: binary_archive.h:165
int i
Definition: pymoduletest.py:23
void serialize_int(T v)
Definition: binary_archive.h:191
void begin_object()
Definition: binary_archive.h:72
binary_archive(stream_type &s)
Definition: binary_archive.h:183
std::ostream stream_type
Definition: binary_archive.h:182
t
Definition: console.py:33
void serialize_blob(void *buf, size_t len, const char *delimiter="")
Definition: binary_archive.h:130
void begin_array(size_t &s)
Definition: binary_archive.h:153
void serialize_uint(T v)
Definition: binary_archive.h:196
provides the implementation of varint's
void tag(const char *)
Definition: binary_archive.h:71
int type
Definition: superscalar.cpp:50
const char * s
Definition: minissdp.c:596
binary_archive(epee::span< const std::uint8_t > s)
Definition: binary_archive.h:95
void set_fail() noexcept
Definition: binary_archive.h:100
unsigned char uint8_t
Definition: stdint.h:124
void begin_array()
Definition: binary_archive.h:158
void end_object()
Definition: binary_archive.h:73
void begin_string(const char *delimiter="\)
Definition: binary_archive.h:229
void end_string(const char *delimiter)
Definition: binary_archive.h:163
void serialize_uvarint(T &v)
Definition: binary_archive.h:216
void end_variant()
Definition: binary_archive.h:75
void serialize_varint(T &v)
Definition: binary_archive.h:210
#define POP_WARNINGS
Definition: warnings.h:17
bool varint_bug_backward_compatibility_enabled() const
Definition: binary_archive.h:236
epee::span< const std::uint8_t > bytes_
Definition: binary_archive.h:173
void set_fail()
Definition: binary_archive.h:186
boost::mpl::bool_< IsSaving > is_saving
Definition: binary_archive.h:64
binary_archive_base()
Definition: binary_archive.h:68
std::size_t getpos() const noexcept
Definition: binary_archive.h:104
#define min(a, b)
Definition: oaes_lib.c:78
bool varint_bug_backward_compatibility_
Definition: binary_archive.h:176
#define false
Definition: stdbool.h:37
void begin_array(size_t s)
Definition: binary_archive.h:221
const char * buf
Definition: slow_memmem.cpp:73
base for the binary archive type
Definition: binary_archive.h:61
stream_type & stream_
Definition: binary_archive.h:238
DISABLE_VS_WARNINGS(4244 4345 4503) using namespace crypto
void end_array()
Definition: binary_archive.h:227
void * memcpy(void *a, const void *b, size_t c)
Definition: glibc_compat.cpp:16
void serialize_uint(T &v)
serializes an unsigned integer
Definition: binary_archive.h:117
void end_string(const char *delimiter="\)
Definition: binary_archive.h:230
size_t remaining_bytes() const noexcept
Definition: binary_archive.h:169
void begin_variant()
Definition: binary_archive.h:74
void delimit_array()
Definition: binary_archive.h:226
void delimit_array()
Definition: binary_archive.h:159
bool good() const
Definition: binary_archive.h:185
void begin_array()
Definition: binary_archive.h:225
bool varint_bug_backward_compatibility_enabled() const
Definition: binary_archive.h:171
std::uint8_t const *const begin_
Definition: binary_archive.h:174
Definition: binary_archive.h:89
#define const
Definition: ipfrdr.c:80
std::streampos getpos() const
Definition: binary_archive.h:188
#define true
Definition: stdbool.h:36
bool good() const noexcept
Definition: binary_archive.h:99
void serialize_int(T &v)
Definition: binary_archive.h:107
binary_archive_base< IsSaving > base_type
Definition: binary_archive.h:63
void begin_string(const char *delimiter)
Definition: binary_archive.h:162
void enable_varint_bug_backward_compatibility()
Definition: binary_archive.h:170