-
Notifications
You must be signed in to change notification settings - Fork 768
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1108 from borglab/fix/headers
Header discipline in base
- Loading branch information
Showing
25 changed files
with
241 additions
and
183 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/* ---------------------------------------------------------------------------- | ||
* GTSAM Copyright 2010, Georgia Tech Research Corporation, | ||
* Atlanta, Georgia 30332-0415 | ||
* All Rights Reserved | ||
* Authors: Frank Dellaert, et al. (see THANKS for the full author list) | ||
* See LICENSE for the license information | ||
* -------------------------------------------------------------------------- */ | ||
|
||
/** | ||
* @file MatrixSerialization.h | ||
* @brief Serialization for matrices | ||
* @author Frank Dellaert | ||
* @date February 2022 | ||
*/ | ||
|
||
// \callgraph | ||
|
||
#pragma once | ||
|
||
#include <gtsam/base/Matrix.h> | ||
|
||
#include <boost/serialization/array.hpp> | ||
#include <boost/serialization/nvp.hpp> | ||
#include <boost/serialization/split_free.hpp> | ||
|
||
namespace boost { | ||
namespace serialization { | ||
|
||
/** | ||
* Ref. | ||
* https://stackoverflow.com/questions/18382457/eigen-and-boostserialize/22903063#22903063 | ||
* | ||
* Eigen supports calling resize() on both static and dynamic matrices. | ||
* This allows for a uniform API, with resize having no effect if the static | ||
* matrix is already the correct size. | ||
* https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html#TutorialMatrixSizesResizing | ||
* | ||
* We use all the Matrix template parameters to ensure wide compatibility. | ||
* | ||
* eigen_typekit in ROS uses the same code | ||
* http://docs.ros.org/lunar/api/eigen_typekit/html/eigen__mqueue_8cpp_source.html | ||
*/ | ||
|
||
// split version - sends sizes ahead | ||
template <class Archive, 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(); | ||
ar << BOOST_SERIALIZATION_NVP(rows); | ||
ar << BOOST_SERIALIZATION_NVP(cols); | ||
ar << make_nvp("data", make_array(m.data(), m.size())); | ||
} | ||
|
||
template <class Archive, 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; | ||
ar >> BOOST_SERIALIZATION_NVP(rows); | ||
ar >> BOOST_SERIALIZATION_NVP(cols); | ||
m.resize(rows, cols); | ||
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); | ||
} | ||
|
||
// specialized to Matrix for MATLAB wrapper | ||
template <class Archive> | ||
void serialize(Archive& ar, gtsam::Matrix& m, const unsigned int version) { | ||
split_free(ar, m, version); | ||
} | ||
|
||
} // namespace serialization | ||
} // namespace boost |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.