19 using InputStream = std::basic_istream<char>;
20 using StreamBuffer = std::basic_streambuf<char>;
22 using std::runtime_error::runtime_error;
25 enum class ErrorCode {
38 static_assert(std::is_integral<T>::value ==
true,
"only integral types are supported");
39 char* ptr =
reinterpret_cast<char*
>(&t);
40 load_binary(ptr,
sizeof(T));
44 void load_binary(
unsigned char* data, std::size_t len);
45 void load_binary(
char* data, std::size_t len);
47 std::size_t remaining_bytes();
50 ErrorCode error_code()
const;
51 void fail(ErrorCode error_code);
54 StreamBuffer* m_stream_buffer;
55 ErrorCode m_error_code = ErrorCode::Ok;
64 using OutputStream = std::basic_ostream<char>;
65 using StreamBuffer = std::basic_streambuf<char>;
67 using std::runtime_error::runtime_error;
70 OutputArchive(OutputStream& os);
71 OutputArchive(StreamBuffer& buf);
74 OutputArchive& operator<<(
const T& t)
76 static_assert(std::is_integral<T>::value ==
true,
"only integral types are supported");
77 const char* ptr =
reinterpret_cast<const char*
>(&t);
78 save_binary(ptr,
sizeof(T));
82 void save_binary(
const unsigned char* data, std::size_t len);
83 void save_binary(
const char* data, std::size_t len);
86 StreamBuffer* m_stream_buffer;