Vanetza
 
Loading...
Searching...
No Matches
archives.cpp
1#include <vanetza/common/archives.hpp>
2
3namespace vanetza
4{
5
6InputArchive::InputArchive(InputStream& is) :
7 m_stream_buffer(is.rdbuf())
8{
9}
10
11InputArchive::InputArchive(StreamBuffer& buf) :
12 m_stream_buffer(&buf)
13{
14}
15
16void InputArchive::load_binary(unsigned char* data, std::size_t len)
17{
18 load_binary(reinterpret_cast<char*>(data), len);
19}
20
21void InputArchive::load_binary(char* data, std::size_t len)
22{
23 std::size_t read_bytes = m_stream_buffer->sgetn(data, len);
24 if (read_bytes != len) {
25 throw Exception("incomplete read");
26 }
27}
28
29char InputArchive::peek_byte()
30{
31 auto got = m_stream_buffer->sgetc();
32 if (got == StreamBuffer::traits_type::eof()) {
33 throw Exception("impossible peek at end of stream");
34 } else {
35 return StreamBuffer::traits_type::to_char_type(got);
36 }
37}
38
39std::size_t InputArchive::remaining_bytes()
40{
41 return m_stream_buffer->in_avail();
42}
43
44OutputArchive::OutputArchive(OutputStream& os) :
45 m_stream_buffer(os.rdbuf())
46{
47}
48
49OutputArchive::OutputArchive(StreamBuffer& buf) :
50 m_stream_buffer(&buf)
51{
52}
53
54void OutputArchive::save_binary(const unsigned char* data, std::size_t len)
55{
56 save_binary(reinterpret_cast<const char*>(data), len);
57}
58
59void OutputArchive::save_binary(const char* data, std::size_t len)
60{
61 std::size_t written_bytes = m_stream_buffer->sputn(data, len);
62 if (written_bytes != len) {
63 throw Exception("incomplete write");
64 }
65}
66
67} // namespace vanetza