22 os.sputn((
char*)t,
sizeof(T)*
size);
27 os.sgetn((
char*)t,
sizeof(T)*
size);
35#define TRIVIALLY_SERIALIZABLE(T) \
36 void encode(std::streambuf& os, const T& t) { \
39 void decode(std::streambuf& os, T& t) { \
61void decode(std::streambuf& os, std::set<T>& v);
66template<
class T,
class S>
68typename std::enable_if<std::is_pod<T>::value && std::is_pod<S>::value,
void>::type
69encode(std::streambuf& os,
const std::pair<T, S>& p) {
74template<
class T,
class S>
76typename std::enable_if<!(std::is_pod<T>::value && std::is_pod<S>::value),
void>::type
77encode(std::streambuf& os,
const std::pair<T, S>& p) {
82template<
class T,
class S>
84typename std::enable_if<std::is_pod<T>::value && std::is_pod<S>::value,
void>::type
85decode(std::streambuf& os, std::pair<T, S>& p) {
89template<
class T,
class S>
91typename std::enable_if<!(std::is_pod<T>::value && std::is_pod<S>::value),
void>::type
92decode(std::streambuf& os, std::pair<T, S>& p) {
100void encode_iter(std::streambuf& os,
size_t size, Iter begin, Iter end);
107typename std::enable_if<std::is_pod<T>::value,
void>::type
108encode(std::streambuf& os,
const std::vector<T>& v) {
110 encode(os, v.data(), v.size());
115typename std::enable_if<!std::is_pod<T>::value,
void>::type
116encode(std::streambuf& os,
const std::vector<T>& v) {
122typename std::enable_if<std::is_pod<T>::value,
void>::type
123decode(std::streambuf& os, std::vector<T>& v) {
133typename std::enable_if<!std::is_pod<T>::value,
void>::type
134decode(std::streambuf& os, std::vector<T>& v) {
139 for(
size_t i = 0; i <
size; i++) {
140 typename std::remove_reference<
decltype(v)>::type::value_type t;
142 v.emplace_back(std::move(t));
149void encode(std::streambuf& os,
const std::set<T>& v) {
160 for(
size_t i = 0; i <
size; i++) {
161 typename std::remove_reference<
decltype(v)>::type::value_type t;
163 hint = v.emplace_hint(hint, std::move(t));
169void decode(std::streambuf& os, std::set<T>& v) {
174template<
class T,
class S>
176void encode(std::streambuf& os,
const std::map<T, S>& v) {
180template<
class T,
class S>
182void decode(std::streambuf& os, std::map<T, S>& v) {
187template<
class T,
class S>
189void encode(std::streambuf& os,
const std::multimap<T, S>& v) {
193template<
class T,
class S>
195void decode(std::streambuf& os, std::multimap<T, S>& v) {
203 for (; begin != end; ++begin) {
void decode(std::streambuf &os, T *t, size_t size=1)
void encode(std::streambuf &os, T *t, size_t size=1)
void decode_thing(std::streambuf &os, T &v)
#define TRIVIALLY_SERIALIZABLE(T)
void encode_iter(std::streambuf &os, size_t size, Iter begin, Iter end)