1 #ifndef _library__binarystream__hpp__included__
2 #define _library__binarystream__hpp__included__
12 struct binary_output_stream
15 binary_output_stream();
16 binary_output_stream(std::ostream
& s
);
17 void byte(uint8_t byte
);
18 void number(uint64_t number
);
19 size_t numberbytes(uint64_t number
);
20 void number32(uint32_t number
);
21 void string(const std::string
& string
);
22 void string_implicit(const std::string
& string
);
23 void blob_implicit(const std::vector
<char>& blob
);
24 void raw(const void* buf
, size_t bufsize
);
25 void extension(uint32_t tag
, std::function
<void(binary_output_stream
&)> fn
, bool even_empty
= false);
26 void extension(uint32_t tag
, std::function
<void(binary_output_stream
&)> fn
, bool even_empty
,
27 size_t size_precognition
);
28 void write_extension_tag(uint32_t tag
, uint64_t size
);
32 std::ostringstream buf
;
35 struct binary_input_stream
38 struct binary_tag_handler
41 std::function
<void(binary_input_stream
& s
)> fn
;
43 binary_input_stream(std::istream
& s
);
44 binary_input_stream(binary_input_stream
& s
, uint64_t len
);
49 std::string
string_implicit();
50 void blob_implicit(std::vector
<char>& blob
);
51 void raw(void* buf
, size_t bufsize
);
52 void extension(std::function
<void(uint32_t tag
, binary_input_stream
& s
)> fn
);
53 void extension(std::initializer_list
<binary_tag_handler
> funcs
,
54 std::function
<void(uint32_t tag
, binary_input_stream
& s
)> default_hdlr
);
58 throw std::logic_error("binary_input_stream::get_left() can only be used in substreams");
62 bool read(char* buf
, size_t size
, bool allow_none
= false);
64 binary_input_stream
* parent
;
69 void binary_null_default(uint32_t tag
, binary_input_stream
& s
);