29 #ifndef CEREAL_ARCHIVES_BINARY_HPP_
30 #define CEREAL_ARCHIVES_BINARY_HPP_
32 #include <cereal/cereal.hpp>
57 size_t const writtenSize = itsStream.rdbuf()->sputn( reinterpret_cast<const char*>( data ), size );
59 if(writtenSize != size)
60 throw Exception(
"Failed to write " + std::to_string(size) +
" bytes to output stream! Wrote " + std::to_string(writtenSize));
64 std::ostream & itsStream;
82 size_t const readSize = itsStream.rdbuf()->sgetn( reinterpret_cast<char*>( data ), size );
85 throw Exception(
"Failed to read " + std::to_string(size) +
" bytes from input stream! Read " + std::to_string(readSize));
89 std::istream & itsStream;
96 template<
class T>
inline
97 typename std::enable_if<std::is_arithmetic<T>::value,
void>::type
98 save(BinaryOutputArchive & ar, T
const & t)
100 ar.saveBinary(std::addressof(t),
sizeof(t));
104 template<
class T>
inline
105 typename std::enable_if<std::is_arithmetic<T>::value,
void>::type
106 load(BinaryInputArchive & ar, T & t)
108 ar.loadBinary(std::addressof(t),
sizeof(t));
112 template <
class Archive,
class T>
inline
113 CEREAL_ARCHIVE_RESTRICT(BinaryInputArchive, BinaryOutputArchive)
114 serialize( Archive & ar, NameValuePair<T> & t )
120 template <
class Archive,
class T>
inline
121 CEREAL_ARCHIVE_RESTRICT(BinaryInputArchive, BinaryOutputArchive)
122 serialize( Archive & ar, SizeTag<T> & t )
128 template <
class T>
inline
129 typename std::enable_if<std::is_array<T>::value,
void>::type
130 save(BinaryOutputArchive & ar, T
const & array)
132 ar.saveBinary(array, traits::sizeof_array<T>() *
sizeof(
typename std::remove_all_extents<T>::type));
136 template <
class T>
inline
137 typename std::enable_if<std::is_array<T>::value,
void>::type
138 load(BinaryInputArchive & ar, T & array)
140 ar.loadBinary(array, traits::sizeof_array<T>() *
sizeof(
typename std::remove_all_extents<T>::type));
144 template <
class T>
inline
145 void save(BinaryOutputArchive & ar, BinaryData<T>
const & bd)
147 ar.saveBinary(bd.data, bd.size);
151 template <
class T>
inline
152 void load(BinaryInputArchive & ar, BinaryData<T> & bd)
154 ar.loadBinary(bd.data, bd.size);
162 #endif // CEREAL_ARCHIVES_BINARY_HPP_