Workaround for boost serialization bug for NULL shared_ptrs version < 1.66.0
parent
1b4b292a6e
commit
6d0705c5dc
|
|
@ -25,6 +25,8 @@
|
||||||
#include <gtsam/inference/VariableSlots.h>
|
#include <gtsam/inference/VariableSlots.h>
|
||||||
|
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
|
#include <boost/serialization/version.hpp>
|
||||||
|
#include <boost/serialization/split_member.hpp>
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
|
|
@ -406,13 +408,41 @@ namespace gtsam {
|
||||||
/** Serialization function */
|
/** Serialization function */
|
||||||
friend class boost::serialization::access;
|
friend class boost::serialization::access;
|
||||||
template<class ARCHIVE>
|
template<class ARCHIVE>
|
||||||
void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
|
void save(ARCHIVE & ar, const unsigned int version) const {
|
||||||
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
|
// TODO(fan): This is a hack for Boost < 1.66
|
||||||
ar & BOOST_SERIALIZATION_NVP(Ab_);
|
// We really need to introduce proper versioning in the archives
|
||||||
ar & BOOST_SERIALIZATION_NVP(model_);
|
// As otherwise this will not read objects serialized by older
|
||||||
|
// versions of GTSAM
|
||||||
|
ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
|
||||||
|
ar << BOOST_SERIALIZATION_NVP(Ab_);
|
||||||
|
bool model_null = false;
|
||||||
|
if(model_.get() == nullptr) {
|
||||||
|
model_null = true;
|
||||||
|
ar << boost::serialization::make_nvp("model_null", model_null);
|
||||||
|
} else {
|
||||||
|
ar << boost::serialization::make_nvp("model_null", model_null);
|
||||||
|
ar << BOOST_SERIALIZATION_NVP(model_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}; // JacobianFactor
|
|
||||||
|
|
||||||
|
template<class ARCHIVE>
|
||||||
|
void load(ARCHIVE & ar, const unsigned int version) {
|
||||||
|
// invoke serialization of the base class
|
||||||
|
ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
|
||||||
|
ar >> BOOST_SERIALIZATION_NVP(Ab_);
|
||||||
|
if (version < 1) {
|
||||||
|
ar >> BOOST_SERIALIZATION_NVP(model_);
|
||||||
|
} else {
|
||||||
|
bool model_null;
|
||||||
|
ar >> BOOST_SERIALIZATION_NVP(model_null);
|
||||||
|
if (!model_null) {
|
||||||
|
ar >> BOOST_SERIALIZATION_NVP(model_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_SERIALIZATION_SPLIT_MEMBER()
|
||||||
|
}; // JacobianFactor
|
||||||
/// traits
|
/// traits
|
||||||
template<>
|
template<>
|
||||||
struct traits<JacobianFactor> : public Testable<JacobianFactor> {
|
struct traits<JacobianFactor> : public Testable<JacobianFactor> {
|
||||||
|
|
@ -420,6 +450,8 @@ struct traits<JacobianFactor> : public Testable<JacobianFactor> {
|
||||||
|
|
||||||
} // \ namespace gtsam
|
} // \ namespace gtsam
|
||||||
|
|
||||||
|
BOOST_CLASS_VERSION(gtsam::JacobianFactor, 1)
|
||||||
|
|
||||||
#include <gtsam/linear/JacobianFactor-inl.h>
|
#include <gtsam/linear/JacobianFactor-inl.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue