43 #define SERIALIZERST_CC
45 #include "Serializers.hh"
60 template <
typename Stream,
typename T>
64 template<
class U>
static true_type
test(
char(*)[
sizeof(decllval<Stream>() >> decllval<U>(),
void(), 0)]);
65 template<
class U>
static false_type test(...);
68 enum { bool_value =
sizeof(true_type) ==
sizeof(
test<T>(0)) };
73 template <
typename Stream,
typename T>
77 template <
typename Stream,
typename T>
81 template<
class U>
static true_type test(
char(*)[
sizeof(decllval<Stream>() << decllval<U>(),
void(), 0)]);
82 template<
class U>
static false_type test(...);
85 enum { bool_value =
sizeof(true_type) ==
sizeof(
test<T>(0)) };
90 template <
typename Stream,
typename T>
94 template <
typename ValueT>
95 std::ostream& serialize_helper(std::ostream& _ostr, ValueT& _rhs, true_type)
101 template <
typename ValueT>
102 std::ostream& serialize_helper(std::ostream& _ostr, ValueT&, false_type)
104 std::cout <<
"Warning: trying to serialize a type that does not have a serialize function" << std::endl;
108 template <
typename ValueT>
109 std::ostream& serialize(std::ostream& _ostr,
const ValueT& _rhs)
115 template <
typename ValueT>
116 std::istream& deserialize_helper(std::istream& _istr, ValueT& _rhs, true_type)
122 template <
typename ValueT>
123 std::istream& deserialize_helper(std::istream& _istr, ValueT&, false_type)
125 std::cout <<
"Warning: trying to deserialize a type that does not have a deserialize function" << std::endl;
129 template <
typename ValueT>
130 std::istream& deserialize(std::istream& _istr, ValueT& _rhs)
135 template <
typename KeyT,
typename ValueT>
136 std::ostream& serialize(std::ostream& os,
const std::map< KeyT, ValueT >& rhs)
138 os << rhs.size() << std::endl;
139 for (
typename std::map< KeyT, ValueT >::const_iterator it = rhs.begin();
143 serialize(os,it->first) << std::endl;
144 serialize(os, it->second) << std::endl;
150 template <
typename KeyT,
typename ValueT>
151 std::istream& deserialize(std::istream& is, std::map< KeyT, ValueT >& rhs)
157 for (
size_t i=0; i<size; i++)
161 deserialize(is, key);
162 deserialize(is, value);
169 template <
typename ValueT>
170 std::ostream& serialize(std::ostream& _ostr,
const std::vector< ValueT >& _rhs)
172 _ostr << _rhs.size() << std::endl;
173 for (
size_t i = 0; i < _rhs.size(); ++i)
174 serialize(_ostr, _rhs[i]) << std::endl;
178 template <
typename ValueT>
179 std::istream& deserialize(std::istream& _istr, std::vector< ValueT >& _rhs)
184 for (
size_t i=0; i<size; i++)
185 deserialize(_istr,_rhs[i]);