5 #ifndef __pinocchio_serialization_eigen_matrix_hpp__
6 #define __pinocchio_serialization_eigen_matrix_hpp__
11 #include <boost/serialization/split_free.hpp>
12 #include <boost/serialization/vector.hpp>
13 #include <boost/serialization/array.hpp>
20 template <
class Archive,
typename Scalar,
int Rows,
int Cols,
int Options,
int MaxRows,
int MaxCols>
21 void save(Archive & ar,
const Eigen::Matrix<Scalar,Rows,Cols,Options,MaxRows,MaxCols> &
m,
const unsigned int )
23 Eigen::DenseIndex
rows(
m.rows()),
cols(
m.cols());
24 if (Rows == Eigen::Dynamic)
25 ar & BOOST_SERIALIZATION_NVP(rows);
26 if (Cols == Eigen::Dynamic)
27 ar & BOOST_SERIALIZATION_NVP(cols);
28 ar &
make_nvp(
"data",make_array(
m.data(), (
size_t)
m.size()));
31 template <
class Archive,
typename Scalar,
int Rows,
int Cols,
int Options,
int MaxRows,
int MaxCols>
32 void load(Archive & ar, Eigen::Matrix<Scalar,Rows,Cols,Options,MaxRows,MaxCols> &
m,
const unsigned int )
34 Eigen::DenseIndex
rows = Rows,
cols = Cols;
35 if (Rows == Eigen::Dynamic)
36 ar >> BOOST_SERIALIZATION_NVP(rows);
37 if (Cols == Eigen::Dynamic)
38 ar >> BOOST_SERIALIZATION_NVP(cols);
40 ar >>
make_nvp(
"data",make_array(
m.data(), (
size_t)
m.size()));
43 template <
class Archive,
typename Scalar,
int Rows,
int Cols,
int Options,
int MaxRows,
int MaxCols>
44 void serialize(Archive & ar, Eigen::Matrix<Scalar,Rows,Cols,Options,MaxRows,MaxCols> &
m,
const unsigned int version)
49 template <
class Archive,
typename PlainObjectBase,
int MapOptions,
typename Str
ideType>
50 void save(Archive & ar,
const Eigen::Map<PlainObjectBase,MapOptions,StrideType> &
m,
const unsigned int )
52 Eigen::DenseIndex
rows(
m.rows()),
cols(
m.cols());
53 if (PlainObjectBase::RowsAtCompileTime == Eigen::Dynamic)
54 ar & BOOST_SERIALIZATION_NVP(rows);
55 if (PlainObjectBase::ColsAtCompileTime == Eigen::Dynamic)
56 ar & BOOST_SERIALIZATION_NVP(cols);
57 ar &
make_nvp(
"data",make_array(
m.data(), (
size_t)
m.size()));
60 template <
class Archive,
typename PlainObjectBase,
int MapOptions,
typename Str
ideType>
61 void load(Archive & ar, Eigen::Map<PlainObjectBase,MapOptions,StrideType> &
m,
const unsigned int )
63 Eigen::DenseIndex
rows = PlainObjectBase::RowsAtCompileTime,
cols = PlainObjectBase::ColsAtCompileTime;
64 if (PlainObjectBase::RowsAtCompileTime == Eigen::Dynamic)
65 ar >> BOOST_SERIALIZATION_NVP(rows);
66 if (PlainObjectBase::ColsAtCompileTime == Eigen::Dynamic)
67 ar >> BOOST_SERIALIZATION_NVP(cols);
69 ar >>
make_nvp(
"data",make_array(
m.data(), (
size_t)
m.size()));
72 template <
class Archive,
typename PlainObjectBase,
int MapOptions,
typename Str
ideType>
73 void serialize(Archive & ar, Eigen::Map<PlainObjectBase,MapOptions,StrideType> &
m,
const unsigned int version)
78 #if !defined(PINOCCHIO_WITH_EIGEN_TENSOR_MODULE) && ((__cplusplus <= 199711L && EIGEN_COMP_MSVC < 1900) || defined(__CUDACC__) || defined(EIGEN_AVOID_STL_ARRAY))
79 template <
class Archive,
typename _IndexType, std::
size_t _NumIndices>
82 ar &
make_nvp(
"array",make_array(&
a.front(),_NumIndices));
85 template <
class Archive,
typename _IndexType, std::
size_t _NumIndices>
88 ar >>
make_nvp(
"array",make_array(&
a.front(),_NumIndices));
91 template <
class Archive,
typename _IndexType, std::
size_t _NumIndices>
97 template <
class Archive,
class T, std::
size_t N>
98 void save(Archive& ar,
const std::array<T,N> &
a,
const unsigned int version)
100 typedef std::array<T,N> Array;
104 template <
class Archive,
class T, std::
size_t N>
105 void load(Archive& ar, std::array<T,N> &
a,
const unsigned int version)
111 #ifdef PINOCCHIO_WITH_EIGEN_TENSOR_MODULE
113 template <
class Archive,
typename _IndexType,
int _NumIndices>
114 void save(Archive & ar,
const Eigen::DSizes<_IndexType,_NumIndices> & ds,
const unsigned int version)
119 template <
class Archive,
typename _IndexType,
int _NumIndices>
120 void load(Archive & ar, Eigen::DSizes<_IndexType,_NumIndices> & ds,
const unsigned int version)
125 template <
class Archive,
typename _IndexType,
int _NumIndices>
126 void serialize(Archive & ar, Eigen::DSizes<_IndexType,_NumIndices> & ds,
const unsigned int version)
133 template <
class Archive,
typename _Scalar,
int _NumIndices,
int _Options,
typename _IndexType>
134 void save(Archive & ar, const ::pinocchio::Tensor<_Scalar,_NumIndices,_Options,_IndexType> &
t,
const unsigned int )
136 typedef ::pinocchio::Tensor<_Scalar,_NumIndices,_Options,_IndexType> Tensor;
137 const typename Tensor::Dimensions & dimensions =
t.dimensions();
139 ar & BOOST_SERIALIZATION_NVP(dimensions);
140 ar &
make_nvp(
"data",make_array(
t.data(), (
size_t)
t.size()));
143 template <
class Archive,
typename _Scalar,
int _NumIndices,
int _Options,
typename _IndexType>
146 typedef ::pinocchio::Tensor<_Scalar,_NumIndices,_Options,_IndexType> Tensor;
147 typename Tensor::Dimensions dimensions;
149 ar >> BOOST_SERIALIZATION_NVP(dimensions);
150 t.resize(dimensions);
152 ar >>
make_nvp(
"data",make_array(
t.data(), (
size_t)
t.size()));
155 template <
class Archive,
typename _Scalar,
int _NumIndices,
int _Options,
typename _IndexType>
164 #endif // ifndef __pinocchio_serialization_eigen_matrix_hpp__