38#include <OpenVolumeMesh/FileManager/Serializers.hh>
40namespace OpenVolumeMesh
53template <
typename Stream,
typename T>
57 template<
class U>
static true_type test(
char(*)[
sizeof(decllval<Stream>() >> decllval<U>(),
void(), 0)]);
66template <
typename Stream,
typename T>
70template <
typename Stream,
typename T>
74 template<
class U>
static true_type test(
char(*)[
sizeof(decllval<Stream>() << decllval<U>(),
void(), 0)]);
83template <
typename Stream,
typename T>
87template <
typename ValueT>
88std::ostream& serialize_helper(std::ostream& _ostr, ValueT& _rhs,
true_type)
94template <
typename ValueT>
95std::ostream& serialize_helper(std::ostream& _ostr, ValueT&, false_type)
97 std::cout <<
"Warning: trying to serialize a type that does not have a serialize function" << std::endl;
101template <
typename ValueT>
102std::ostream& serialize(std::ostream& _ostr,
const ValueT& _rhs)
104 return serialize_helper(_ostr, _rhs, has_output_operator<std::ostream, ValueT>::value);
108template <
typename ValueT>
109std::istream& deserialize_helper(std::istream& _istr, ValueT& _rhs, true_type)
115template <
typename ValueT>
116std::istream& deserialize_helper(std::istream& _istr, ValueT&, false_type)
118 std::cout <<
"Warning: trying to deserialize a type that does not have a deserialize function" << std::endl;
122template <
typename ValueT>
123std::istream& deserialize(std::istream& _istr, ValueT& _rhs)
125 return deserialize_helper(_istr, _rhs, has_input_operator<std::istream, ValueT>::value);
128template <
typename KeyT,
typename ValueT>
129std::ostream& serialize(std::ostream& os,
const std::map< KeyT, ValueT >& rhs)
131 os << rhs.size() << std::endl;
132 for (
typename std::map< KeyT, ValueT >::const_iterator it = rhs.begin();
136 serialize(os,it->first) << std::endl;
137 serialize(os, it->second) << std::endl;
143template <
typename KeyT,
typename ValueT>
144std::istream& deserialize(std::istream& is, std::map< KeyT, ValueT >& rhs)
150 for (
size_t i=0; i<size; i++)
154 deserialize(is, key);
155 deserialize(is, value);
162template <
typename ValueT>
163std::ostream& serialize(std::ostream& _ostr,
const std::vector< ValueT >& _rhs)
165 _ostr << _rhs.size() << std::endl;
166 for (
size_t i = 0; i < _rhs.size(); ++i)
167 serialize(_ostr, _rhs[i]) << std::endl;
171template <
typename ValueT>
172std::istream& deserialize(std::istream& _istr, std::vector< ValueT >& _rhs)
177 for (
size_t i=0; i<size; i++)
178 deserialize(_istr,_rhs[i]);