debugging serialization of ChartValues

release/4.3a0
Mike Bosse 2014-10-31 14:21:02 +01:00
parent 003224ac3f
commit 5e51745b86
3 changed files with 40 additions and 0 deletions

View File

@ -147,6 +147,24 @@ protected:
private:
/// Fake Tag struct for singleton pool allocator. In fact, it is never used!
struct PoolTag { };
private:
/// @}
/// @name Advanced Interface
/// @{
/** Serialization function */
friend class boost::serialization::access;
template<class ARCHIVE>
void serialize(ARCHIVE & ar, const unsigned int version) {
ar & boost::serialization::make_nvp("value", GenericValue<T>::value());
// todo: implement a serialization for charts
//ar & boost::serialization::make_nvp("Chart", boost::serialization::base_object<typename Chart>(*this));
}
/// @}
};
namespace traits {

View File

@ -61,6 +61,11 @@ public:
return traits::equals<T>(this->value_, genericValue2.value_, tol);
}
// non virtual equals function
bool equals(const GenericValue &other, double tol = 1e-9) const {
return traits::equals<T>(this->value(),other.value(),tol);
}
virtual void print(const std::string& str) const {
traits::print<T>(value_,str);
}

View File

@ -41,6 +41,8 @@ BOOST_CLASS_EXPORT(gtsam::PinholeCamera<Cal3_S2>)
BOOST_CLASS_EXPORT(gtsam::PinholeCamera<Cal3DS2>)
BOOST_CLASS_EXPORT(gtsam::PinholeCamera<Cal3Bundler>)
BOOST_CLASS_EXPORT(gtsam::ChartValue<gtsam::Pose3>);
/* ************************************************************************* */
typedef PinholeCamera<Cal3_S2> PinholeCal3S2;
typedef PinholeCamera<Cal3DS2> PinholeCal3DS2;
@ -56,12 +58,27 @@ static Cal3DS2 cal2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0);
static Cal3Bundler cal3(1.0, 2.0, 3.0);
TEST (Serialization, TemplatedValues) {
std::cout << __LINE__ << std::endl;
EXPECT(equalsObj(pt3));
std::cout << __LINE__ << std::endl;
ChartValue<Point3> chv1(pt3);
std::cout << __LINE__ << std::endl;
EXPECT(equalsObj(chv1));
std::cout << __LINE__ << std::endl;
PinholeCal3S2 pc(pose3,cal1);
EXPECT(equalsObj(pc));
std::cout << __LINE__ << std::endl;
Values values;
values.insert(1,pt3);
std::cout << __LINE__ << std::endl;
EXPECT(equalsObj(values));
std::cout << __LINE__ << std::endl;
values.insert(Symbol('a',0), PinholeCal3S2(pose3, cal1));
values.insert(Symbol('s',5), PinholeCal3DS2(pose3, cal2));
values.insert(Symbol('d',47), PinholeCal3Bundler(pose3, cal3));
values.insert(Symbol('a',5), PinholeCal3S2(pose3, cal1));
EXPECT(equalsObj(values));
std::cout << __LINE__ << std::endl;
EXPECT(equalsXML(values));
EXPECT(equalsBinary(values));
}