30#ifndef HPP_PINOCCHIO_SERIALIZATION_HH 
   31#define HPP_PINOCCHIO_SERIALIZATION_HH 
   33#include <boost/serialization/shared_ptr.hpp> 
   34#include <boost/serialization/split_free.hpp> 
   35#include <boost/serialization/weak_ptr.hpp> 
   39#include <hpp/util/serialization.hh> 
   40#include <pinocchio/fwd.hpp> 
   41#include <pinocchio/serialization/eigen.hpp> 
   46BOOST_SERIALIZATION_SPLIT_FREE(hpp::pinocchio::DeviceWkPtr_t)
 
   49namespace serialization {
 
   50template <
class Archive>
 
   52                 const unsigned int version) {
 
   53  load<Archive, hpp::pinocchio::Device>(ar, d, version);
 
   54  auto* har = hpp::serialization::cast(&ar);
 
   55  if (d && har && har->contains(d->name()))
 
   56    d = har->template get<hpp::pinocchio::Device>(d->name(), 
true)->self();
 
 
   58template <
class Archive>
 
   59inline void load(Archive& ar, hpp::pinocchio::DeviceWkPtr_t& d,
 
   60                 const unsigned int version) {
 
   61  load<Archive, hpp::pinocchio::Device>(ar, d, version);
 
   62  auto* har = hpp::serialization::cast(&ar);
 
   63  std::string name(d.lock()->name());
 
   64  if (d.lock() && har && har->contains(name))
 
   65    d = har->template get<hpp::pinocchio::Device>(name, 
true)->self();
 
 
   67template <
class Archive>
 
   69                 const unsigned int version) {
 
   70  load<Archive, hpp::pinocchio::HumanoidRobot>(ar, d, version);
 
   71  auto* har = hpp::serialization::cast(&ar);
 
   72  if (d && har && har->contains(d->name()))
 
 
   78template <
class Archive>
 
   79inline void load(Archive& ar, hpp::pinocchio::HumanoidRobotWkPtr_t& d,
 
   80                 const unsigned int version) {
 
   81  load<Archive, hpp::pinocchio::HumanoidRobot>(ar, d, version);
 
   82  auto* har = hpp::serialization::cast(&ar);
 
   83  std::string name(d.lock()->name());
 
   84  if (d.lock() && har && har->contains(name))
 
 
   90template <
class Archive, 
typename _Scalar, 
int _Rows, 
int _Cols, 
int _Options,
 
   91          int _MaxRows, 
int _MaxCols>
 
   94    Eigen::Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>& m,
 
   95    const unsigned int version) {
 
   97  Eigen::DenseIndex rows(m.rows()), cols(m.cols());
 
   98  ar& BOOST_SERIALIZATION_NVP(rows);
 
   99  ar& BOOST_SERIALIZATION_NVP(cols);
 
  100  if (!Archive::is_saving::value) m.resize(rows, cols);
 
  102    ar& make_nvp(
"data", make_array(m.data(), (
size_t)m.size()));
 
 
  109namespace serialization {
 
  110namespace remove_duplicate {
 
  111template <
typename Key, 
typename Compare = std::less<Key>>
 
  114    return Compare::operator()(*t1, *t2);
 
 
 
  118template <
typename Derived>
 
  121                  const Eigen::PlainObjectBase<Derived>& b)
 const {
 
  122    if (a.size() < b.size()) 
return true;
 
  123    if (a.size() > b.size()) 
return false;
 
  124    for (Eigen::Index i = 0; i < a.size(); ++i) {
 
  125      if (a.derived().data()[i] < b.derived().data()[i]) 
return true;
 
  126      if (a.derived().data()[i] > b.derived().data()[i]) 
return false;
 
 
 
  132template <
typename Key, 
typename Compare = std::less<Key>>
 
  136  std::set<Key const*, ptr_compare_type> 
datas;
 
 
  143                eigen_compare<::hpp::pinocchio::vector_t>>
 
  146template <
class Archive, 
typename Key>
 
  148                                                   const char* name, Key& key,
 
  149                                                   const unsigned int version) {
 
  152  ar& boost::serialization::make_nvp(name, value);
 
  153  if (!Archive::is_saving::value) key = *value;
 
 
  156template <
class Archive, 
typename Key>
 
  157inline void save_impl(Archive& ar, 
const char* name, 
const Key& key,
 
  158                      const unsigned int version) {
 
  160  Key 
const* value = &key;
 
  161  ar << boost::serialization::make_nvp(name, value);
 
 
  164template <
class Archive, 
typename Key, 
typename Compare = std::less<Key>>
 
  167                      int& hitcount, 
const char* name, 
const Key& key,
 
  168                      const unsigned int version) {
 
  170  if (!Archive::is_saving::value)
 
  171    throw std::logic_error(
 
  172        "HPP serialization: cannot load into a const element. This should " 
  174  auto result = set.insert(&key);
 
  175  bool inserted = result.second;
 
  176  Key 
const* k = (inserted ? &key : *result.first);
 
  177  ar& boost::serialization::make_nvp(name, k);
 
  178  if (!inserted) hitcount++;
 
 
  181template <
class Archive, 
typename Key, 
typename Compare = std::less<Key>>
 
  184                      int& hitcount, 
const char* name, Key& key,
 
  185                      const unsigned int version) {
 
  186  if (Archive::is_saving::value) {
 
  187    save_impl(ar, set, hitcount, name, key, version);
 
 
  193template <
bool is_base>
 
  195  template <
typename Archive, 
typename Key, 
typename Compare = std::less<Key>>
 
  196  static inline void run(Archive& ar, 
const char* name, Key& key,
 
  197                         const unsigned int version) {
 
 
  201  template <
typename Archive, 
typename Key, 
typename Compare = std::less<Key>>
 
  202  static inline void save(Archive& ar, 
const char* name, 
const Key& key,
 
  203                          const unsigned int version) {
 
 
 
  211  template <
typename Archive, 
typename Key, 
typename Compare = std::less<Key>>
 
  212  static inline void run(Archive& ar, 
const char* name, Key& key,
 
  213                         const unsigned int version) {
 
 
  219  template <
typename Archive, 
typename Key, 
typename Compare = std::less<Key>>
 
  220  static inline void save(Archive& ar, 
const char* name, 
const Key& key,
 
  221                          const unsigned int version) {
 
 
 
  230template <
typename Archive, 
typename Key, 
typename Compare = std::less<Key>,
 
  231          bool is_base = std::is_base_of<archive<Key, Compare>, Archive>::value>
 
  232inline void serialize(Archive& ar, 
const char* name, Key& key,
 
  233                      const unsigned int version) {
 
 
  238template <
typename Archive, 
typename Key, 
typename Compare = std::less<Key>,
 
  239          bool is_base = std::is_base_of<archive<Key, Compare>, Archive>::value>
 
  240inline void save(Archive& ar, 
const char* name, 
const Key& key,
 
  241                 const unsigned int version) {
 
 
  246template <
typename Archive>
 
  249                             const unsigned int version) {
 
  250  serialize<Archive, ::hpp::pinocchio::vector_t, vector_archive::compare_type>(
 
  251      ar, name, key, version);
 
 
  254template <
typename Archive>
 
  256                        const ::hpp::pinocchio::vector_t& key,
 
  257                        const unsigned int version) {
 
  258  save<Archive, ::hpp::pinocchio::vector_t, vector_archive::compare_type>(
 
  259      ar, name, key, version);
 
 
 
 
Robot with geometric and dynamic pinocchio.
Definition device.hh:60
Humanoid robot.
Definition humanoid-robot.hh:44
void serialize(Archive &ar, hpp::pinocchio::liegroup::VectorSpaceOperation< Size, rot > &lg, const unsigned int version)
Definition serialization.hh:40
void load(Archive &ar, hpp::pinocchio::DevicePtr_t &d, const unsigned int version)
Definition serialization.hh:51
Definition serialization.hh:36
shared_ptr< Device > DevicePtr_t
Definition fwd.hh:118
Eigen::Matrix< value_type, Eigen::Dynamic, 1 > vector_t
Definition fwd.hh:88
shared_ptr< HumanoidRobot > HumanoidRobotPtr_t
Definition fwd.hh:121
archive<::hpp::pinocchio::vector_t, eigen_compare<::hpp::pinocchio::vector_t > > vector_archive
Definition serialization.hh:144
void save_impl(Archive &ar, const char *name, const Key &key, const unsigned int version)
Definition serialization.hh:157
void save(Archive &ar, const char *name, const Key &key, const unsigned int version)
Definition serialization.hh:240
void save_vector(Archive &ar, const char *name, const ::hpp::pinocchio::vector_t &key, const unsigned int version)
Definition serialization.hh:255
void serialize(Archive &ar, std::set< Key const *, ptr_less< Key, Compare > > &set, int &hitcount, const char *name, Key &key, const unsigned int version)
Definition serialization.hh:182
void serialize_vector(Archive &ar, const char *name, ::hpp::pinocchio::vector_t &key, const unsigned int version)
Definition serialization.hh:247
void load_or_save_no_remove_duplicate_check(Archive &ar, const char *name, Key &key, const unsigned int version)
Definition serialization.hh:147
Utility functions.
Definition body.hh:39
Definition serialization.hh:133
int hitcount
Definition serialization.hh:137
Compare compare_type
Definition serialization.hh:134
archive()
Definition serialization.hh:139
std::set< Key const  *, ptr_compare_type > datas
Definition serialization.hh:136
ptr_less< Key, Compare > ptr_compare_type
Definition serialization.hh:135
Definition serialization.hh:119
bool operator()(const Eigen::PlainObjectBase< Derived > &a, const Eigen::PlainObjectBase< Derived > &b) const
Definition serialization.hh:120
Definition serialization.hh:112
bool operator()(Key const *t1, Key const *t2) const
Definition serialization.hh:113
static void run(Archive &ar, const char *name, Key &key, const unsigned int version)
Definition serialization.hh:212
static void save(Archive &ar, const char *name, const Key &key, const unsigned int version)
Definition serialization.hh:220
Definition serialization.hh:194
static void save(Archive &ar, const char *name, const Key &key, const unsigned int version)
Definition serialization.hh:202
static void run(Archive &ar, const char *name, Key &key, const unsigned int version)
Definition serialization.hh:196