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 <boost/make_shared.hpp>
|
||||
#include <boost/serialization/version.hpp>
|
||||
#include <boost/serialization/split_member.hpp>
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
|
|
@ -406,13 +408,41 @@ namespace gtsam {
|
|||
/** Serialization function */
|
||||
friend class boost::serialization::access;
|
||||
template<class ARCHIVE>
|
||||
void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
|
||||
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
|
||||
ar & BOOST_SERIALIZATION_NVP(Ab_);
|
||||
ar & BOOST_SERIALIZATION_NVP(model_);
|
||||
void save(ARCHIVE & ar, const unsigned int version) const {
|
||||
// TODO(fan): This is a hack for Boost < 1.66
|
||||
// We really need to introduce proper versioning in the archives
|
||||
// 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
|
||||
template<>
|
||||
struct traits<JacobianFactor> : public Testable<JacobianFactor> {
|
||||
|
|
@ -420,6 +450,8 @@ struct traits<JacobianFactor> : public Testable<JacobianFactor> {
|
|||
|
||||
} // \ namespace gtsam
|
||||
|
||||
BOOST_CLASS_VERSION(gtsam::JacobianFactor, 1)
|
||||
|
||||
#include <gtsam/linear/JacobianFactor-inl.h>
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue