1#include <vanetza/common/archives.hpp>
6InputArchive::InputArchive(InputStream& is) :
7 m_stream_buffer(is.rdbuf())
11InputArchive::InputArchive(StreamBuffer& buf) :
16void InputArchive::load_binary(
unsigned char* data, std::size_t len)
18 load_binary(
reinterpret_cast<char*
>(data), len);
21void InputArchive::load_binary(
char* data, std::size_t len)
23 std::size_t read_bytes = m_stream_buffer->sgetn(data, len);
24 if (read_bytes != len) {
25 fail(ErrorCode::IncompleteData);
26 throw Exception(
"incomplete read");
30char InputArchive::peek_byte()
32 auto got = m_stream_buffer->sgetc();
33 if (got == StreamBuffer::traits_type::eof()) {
34 fail(ErrorCode::IncompleteData);
35 throw Exception(
"impossible peek at end of stream");
37 return StreamBuffer::traits_type::to_char_type(got);
41bool InputArchive::is_good()
const
43 return m_error_code == ErrorCode::Ok;
46InputArchive::ErrorCode InputArchive::error_code()
const
51void InputArchive::fail(ErrorCode error_code)
54 if (m_error_code == ErrorCode::Ok) {
55 m_error_code = error_code;
59std::size_t InputArchive::remaining_bytes()
61 return m_stream_buffer->in_avail();
64OutputArchive::OutputArchive(OutputStream& os) :
65 m_stream_buffer(os.rdbuf())
69OutputArchive::OutputArchive(StreamBuffer& buf) :
74void OutputArchive::save_binary(
const unsigned char* data, std::size_t len)
76 save_binary(
reinterpret_cast<const char*
>(data), len);
79void OutputArchive::save_binary(
const char* data, std::size_t len)
81 std::size_t written_bytes = m_stream_buffer->sputn(data, len);
82 if (written_bytes != len) {
83 throw Exception(
"incomplete write");