28 #ifndef __pinocchio_serialization_eigen_matrix_hpp__
29 #define __pinocchio_serialization_eigen_matrix_hpp__
31 #include <Eigen/Dense>
32 #include "pinocchio/math/tensor.hpp"
34 #include <boost/serialization/split_free.hpp>
35 #include <boost/serialization/vector.hpp>
36 #include <boost/serialization/array.hpp>
40 namespace serialization
43 template <
class Archive,
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols>
44 void save(Archive & ar,
const Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> & m,
const unsigned int )
46 Eigen::DenseIndex rows(m.rows()), cols(m.cols());
47 ar & BOOST_SERIALIZATION_NVP(rows);
48 ar & BOOST_SERIALIZATION_NVP(cols);
49 ar & make_nvp(
"data",make_array(m.data(), (
size_t)m.size()));
52 template <
class Archive,
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols>
53 void load(Archive & ar, Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> & m,
const unsigned int )
55 Eigen::DenseIndex rows,cols;
56 ar >> BOOST_SERIALIZATION_NVP(rows);
57 ar >> BOOST_SERIALIZATION_NVP(cols);
60 ar >> make_nvp(
"data",make_array(m.data(), (
size_t)m.size()));
63 template <
class Archive,
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols>
64 void serialize(Archive & ar, Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> & m,
const unsigned int version)
66 split_free(ar,m,version);
69 #if !defined(PINOCCHIO_WITH_EIGEN_TENSOR_MODULE) && ((__cplusplus <= 199711L && EIGEN_COMP_MSVC < 1900) || defined(__CUDACC__) || defined(EIGEN_AVOID_STL_ARRAY))
70 template <
class Archive,
typename _IndexType, std::
size_t _NumIndices>
73 ar & make_nvp(
"array",make_array(&a.front(),_NumIndices));
76 template <
class Archive,
typename _IndexType, std::
size_t _NumIndices>
79 ar >> make_nvp(
"array",make_array(&a.front(),_NumIndices));
82 template <
class Archive,
typename _IndexType, std::
size_t _NumIndices>
85 split_free(ar,a,version);
88 template <
class Archive,
class T, std::
size_t N>
89 void save(Archive& ar,
const std::array<T,N> & a,
const unsigned int version)
91 typedef std::array<T,N> Array;
92 serialize(ar,
const_cast<Array&
>(a),version);
95 template <
class Archive,
class T, std::
size_t N>
96 void load(Archive& ar, std::array<T,N> & a,
const unsigned int version)
98 serialize(ar,a,version);
102 #ifdef PINOCCHIO_WITH_EIGEN_TENSOR_MODULE
104 template <
class Archive,
typename _IndexType,
int _NumIndices>
105 void save(Archive & ar,
const Eigen::DSizes<_IndexType,_NumIndices> & ds,
const unsigned int version)
110 template <
class Archive,
typename _IndexType,
int _NumIndices>
111 void load(Archive & ar, Eigen::DSizes<_IndexType,_NumIndices> & ds,
const unsigned int version)
116 template <
class Archive,
typename _IndexType,
int _NumIndices>
117 void serialize(Archive & ar, Eigen::DSizes<_IndexType,_NumIndices> & ds,
const unsigned int version)
124 template <
class Archive,
typename _Scalar,
int _NumIndices,
int _Options,
typename _IndexType>
125 void save(Archive & ar, const ::pinocchio::Tensor<_Scalar,_NumIndices,_Options,_IndexType> & t,
const unsigned int )
127 typedef ::pinocchio::Tensor<_Scalar,_NumIndices,_Options,_IndexType> Tensor;
128 const typename Tensor::Dimensions & dimensions = t.dimensions();
130 ar & BOOST_SERIALIZATION_NVP(dimensions);
131 ar & make_nvp(
"data",make_array(t.data(), (
size_t)t.size()));
134 template <
class Archive,
typename _Scalar,
int _NumIndices,
int _Options,
typename _IndexType>
137 typedef ::pinocchio::Tensor<_Scalar,_NumIndices,_Options,_IndexType> Tensor;
138 typename Tensor::Dimensions dimensions;
140 ar >> BOOST_SERIALIZATION_NVP(dimensions);
141 t.resize(dimensions);
143 ar >> make_nvp(
"data",make_array(t.data(), (
size_t)t.size()));
146 template <
class Archive,
typename _Scalar,
int _NumIndices,
int _Options,
typename _IndexType>
149 split_free(ar,t,version);
155 #endif // ifndef __pinocchio_serialization_eigen_matrix_hpp__