Generic Eigen::Matrix serialization for boost

release/4.3a0
Varun Agrawal 2020-07-09 23:12:35 -04:00
parent 0f0752fd1f
commit 018e6ba68c
1 changed files with 34 additions and 7 deletions

View File

@ -549,16 +549,32 @@ namespace boost {
namespace serialization { namespace serialization {
// split version - sends sizes ahead // split version - sends sizes ahead
template<class Archive> template<class Archive,
void save(Archive & ar, const gtsam::Matrix & m, unsigned int /*version*/) { typename Scalar_,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_>
void save(Archive & ar,
const Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> & m,
const unsigned int /*version*/) {
const size_t rows = m.rows(), cols = m.cols(); const size_t rows = m.rows(), cols = m.cols();
ar << BOOST_SERIALIZATION_NVP(rows); ar << BOOST_SERIALIZATION_NVP(rows);
ar << BOOST_SERIALIZATION_NVP(cols); ar << BOOST_SERIALIZATION_NVP(cols);
ar << make_nvp("data", make_array(m.data(), m.size())); ar << make_nvp("data", make_array(m.data(), m.size()));
} }
template<class Archive> template<class Archive,
void load(Archive & ar, gtsam::Matrix & m, unsigned int /*version*/) { typename Scalar_,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_>
void load(Archive & ar,
Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> & m,
const unsigned int /*version*/) {
size_t rows, cols; size_t rows, cols;
ar >> BOOST_SERIALIZATION_NVP(rows); ar >> BOOST_SERIALIZATION_NVP(rows);
ar >> BOOST_SERIALIZATION_NVP(cols); ar >> BOOST_SERIALIZATION_NVP(cols);
@ -566,8 +582,19 @@ namespace boost {
ar >> make_nvp("data", make_array(m.data(), m.size())); ar >> make_nvp("data", make_array(m.data(), m.size()));
} }
// templated version of BOOST_SERIALIZATION_SPLIT_FREE(Eigen::Matrix);
template<class Archive,
typename Scalar_,
int Rows_,
int Cols_,
int Ops_,
int MaxRows_,
int MaxCols_>
void serialize(Archive & ar,
Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_> & m,
const unsigned int version) {
split_free(ar, m, version);
}
} // namespace serialization } // namespace serialization
} // namespace boost } // namespace boost
BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Matrix);