1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
// Copyright (C) 2016 EDF
// All Rights Reserved
// This code is published under the GNU Lesser General Public License (GNU LGPL)
#ifndef EIGENSERIALIZATION_H
#define EIGENSERIALIZATION_H
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <Eigen/Dense>
/** \file eigenSerialization.h
* \brief Boost serialization of eigen object of type matrix_type (matrix or array)
* \author Xavier Warin
*/
namespace boost
{
namespace serialization
{
/// \brief save the object
/// \param ar archive used
/// \param g object to load
template < class Archive,
class S,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_ >
inline void save(Archive &ar,
const Eigen::Array<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> &g,
const unsigned int)
{
int rows = g.rows();
int cols = g.cols();
ar &rows;
ar &cols;
ar &boost::serialization::make_array(g.data(), rows * cols);
}
/// \brief load the object
/// \param ar archive used
/// \param g object to load
template < class Archive,
class S,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_ >
inline void load(
Archive &ar,
Eigen::Array<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> &g,
const unsigned int)
{
int rows, cols;
ar &rows;
ar &cols;
g.resize(rows, cols);
ar &boost::serialization::make_array(g.data(), rows * cols);
}
/// \brief serialize the object Eigen
/// \param ar archive used
/// \param g object to load
/// \param version useless
template < class Archive,
class S,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_ >
inline void serialize(
Archive &ar,
Eigen::Array< S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> &g,
const unsigned int version)
{
split_free(ar, g, version);
}
/// \brief save the object
/// \param ar archive used
/// \param g object to load
template < class Archive,
class S,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_ >
inline void save(Archive &ar,
const Eigen::Matrix<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> &g,
const unsigned int)
{
int rows = g.rows();
int cols = g.cols();
ar &rows;
ar &cols;
ar &boost::serialization::make_array(g.data(), rows * cols);
}
/// \brief load the object
/// \param ar archive used
/// \param g object to load
template < class Archive,
class S,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_ >
inline void load(
Archive &ar,
Eigen::Matrix<S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> &g,
const unsigned int)
{
int rows, cols;
ar &rows;
ar &cols;
g.resize(rows, cols);
ar &boost::serialization::make_array(g.data(), rows * cols);
}
/// \brief serialize the object Eigen
/// \param ar archive used
/// \param g object to load
/// \param version useless
template < class Archive,
class S,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_ >
inline void serialize(
Archive &ar,
Eigen::Matrix< S, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> &g,
const unsigned int version)
{
split_free(ar, g, version);
}
} // namespace serialization
} // namespace boost
#endif /* EIGENSERIALIZATION_H */
|