5 #ifndef __pinocchio_serialization_vector_hpp__
6 #define __pinocchio_serialization_vector_hpp__
10 #include <boost/version.hpp>
11 #include <boost/core/addressof.hpp>
12 #include <boost/serialization/nvp.hpp>
13 #include <boost/serialization/vector.hpp>
17 namespace serialization
21 #if BOOST_VERSION / 100 % 1000 == 58
27 public std::pair<const char *, T *>,
28 public wrapper_traits<const nvp< T > >
31 nvp(
const nvp & rhs) :
32 std::pair<const char *, T *>(rhs.first, rhs.second)
35 explicit nvp(
const char * name_, T & t) :
37 std::pair<const char *, T *>(name_, boost::addressof(t))
40 const char *
name()
const {
44 return *(this->second);
47 const T & const_value()
const {
48 return *(this->second);
51 template<
class Archive>
56 ar.operator<<(const_value());
58 template<
class Archive>
63 ar.operator>>(value());
65 BOOST_SERIALIZATION_SPLIT_MEMBER()
69 template<
class T,
class Allocator>
70 struct nvp< std::vector<T,Allocator> > :
71 public std::pair<const char *, std::vector<T,Allocator> *>,
72 public wrapper_traits<const nvp< std::vector<T,Allocator> > >
75 nvp(
const nvp & rhs) :
76 std::pair<const char *, std::vector<T,Allocator> *>(rhs.first, rhs.second)
79 explicit nvp(
const char * name_, std::vector<T,Allocator> & t) :
81 std::pair<const char *, std::vector<T,Allocator> *>(name_, boost::addressof(t))
84 const char *
name()
const {
88 std::vector<T,Allocator> & value()
const {
89 return *(this->second);
92 const std::vector<T,Allocator> & const_value()
const {
93 return *(this->second);
96 template<
class Archive>
97 void save(Archive & ar,
101 const size_t count(const_value().size());
102 ar << BOOST_SERIALIZATION_NVP(count);
103 if (!const_value().empty())
105 for(
typename std::vector<T,Allocator>::const_iterator hint = const_value().begin();
106 hint != const_value().end(); ++hint)
108 ar & boost::serialization::make_nvp(
"item", *hint);
113 template<
class Archive>
114 void load(Archive & ar,
119 ar >> BOOST_SERIALIZATION_NVP(count);
120 value().resize(count);
121 for(
typename std::vector<T,Allocator>::iterator hint = value().begin();
122 hint != value().end(); ++hint)
124 ar >> boost::serialization::make_nvp(
"item", *hint);
128 BOOST_SERIALIZATION_SPLIT_MEMBER()
134 template<
class T,
class Allocator>
135 inline const fixme::nvp< std::vector<T,Allocator> >
136 make_nvp(
const char * name, std::vector<T,Allocator> & t)
138 return fixme::nvp< std::vector<T,Allocator> >(
name, t);
141 template<
class T,
class Allocator>
142 inline const nvp< std::vector<T,Allocator> >
143 make_nvp(
const char * name, std::vector<T,Allocator> & t)
145 return nvp< std::vector<T,Allocator> >(
name, t);
152 #endif // ifndef __pinocchio_serialization_vector_hpp__