19 #ifndef HPP_MANIPULATION_SERIALIZATION_HH
20 # define HPP_MANIPULATION_SERIALIZATION_HH
22 # include <boost/serialization/split_free.hpp>
23 # include <boost/serialization/shared_ptr.hpp>
24 # include <boost/serialization/weak_ptr.hpp>
26 # include <hpp/util/serialization.hh>
27 # include <hpp/pinocchio/serialization.hh>
36 namespace serialization {
37 template<
typename Archive>
40 auto* har = hpp::serialization::cast(&ar);
41 if (!har || !har->contains(name))
42 throw std::runtime_error(
"Cannot deserialize edges with a provided graph with correct name.");
43 return har->template get<manipulation::graph::Graph>(name,
true)->self();
46 template<
class Archive,
class GraphCompT>
53 if (Archive::is_saving::value) {
54 id = (c ? c->id() : -1);
55 if (c && c->parentGraph()) name = c->parentGraph()->name();
57 ar & BOOST_SERIALIZATION_NVP(
id);
58 ar & BOOST_SERIALIZATION_NVP(name);
59 if (!Archive::is_saving::value) {
61 c = HPP_DYNAMIC_PTR_CAST(GraphCompT, graph->get(
id).lock());
73 namespace serialization {
74 template<
class Archive>
81 if (Archive::is_saving::value) name = g->name();
82 ar & BOOST_SERIALIZATION_NVP(name);
83 if (!Archive::is_saving::value)
87 template<
class Archive>
93 template<
class Archive>
99 template<
class Archive>
100 inline void serialize(Archive & ar, hpp::manipulation::graph::EdgeWkPtr_t& e,
const unsigned int version)
107 template<
class Archive>
108 inline void serialize(Archive & ar, hpp::manipulation::graph::StateWkPtr_t& s,
const unsigned int version)
115 template<
class Archive>
118 load<Archive, hpp::manipulation::Device> (ar, d, version);
119 auto* har = hpp::serialization::cast(&ar);
120 if (d && har && har->contains(d->name()))
121 d = har->template getChildClass<hpp::pinocchio::Device, hpp::manipulation::Device>(d->name(),
true)->self();
124 template<
class Archive>
125 inline void load (Archive& ar, hpp::manipulation::DeviceWkPtr_t& d,
const unsigned int version)
127 load<Archive, hpp::manipulation::Device> (ar, d, version);
128 auto* har = hpp::serialization::cast(&ar);
131 if (har && har->contains(dd->name()))
132 d = har->template getChildClass<hpp::pinocchio::Device, hpp::manipulation::Device>(dd->name(),
true)->self();
137 #endif // HPP_MANIPULATION_SERIALIZATION_HH