From 974bef7bc808c7df99ce83a8a0cb988f904dcb86 Mon Sep 17 00:00:00 2001 From: Richard Roberts Date: Sat, 22 Jun 2013 15:40:11 +0000 Subject: [PATCH] Added serialization functions for fixed-size vectors --- gtsam/base/Vector.h | 14 ++++++++++++++ gtsam/base/tests/testSerializationBase.cpp | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/gtsam/base/Vector.h b/gtsam/base/Vector.h index 7b8404289..2c6066042 100644 --- a/gtsam/base/Vector.h +++ b/gtsam/base/Vector.h @@ -374,7 +374,21 @@ namespace boost { ar >> make_nvp("data", make_array(v.data(), v.size())); } + // split version - copies into an STL vector for serialization + template + void save(Archive & ar, const Eigen::Matrix & v, unsigned int version) { + ar << make_nvp("data", make_array(v.data(), v.RowsAtCompileTime)); + } + + template + void load(Archive & ar, Eigen::Matrix & v, unsigned int version) { + ar >> make_nvp("data", make_array(v.data(), v.RowsAtCompileTime)); + } + } // namespace serialization } // namespace boost BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector) +BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector2) +BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector3) +BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector6) diff --git a/gtsam/base/tests/testSerializationBase.cpp b/gtsam/base/tests/testSerializationBase.cpp index 3bb88f759..30b7cd2f3 100644 --- a/gtsam/base/tests/testSerializationBase.cpp +++ b/gtsam/base/tests/testSerializationBase.cpp @@ -85,12 +85,21 @@ TEST (Serialization, FastVector) { /* ************************************************************************* */ TEST (Serialization, matrix_vector) { EXPECT(equality(Vector_(4, 1.0, 2.0, 3.0, 4.0))); + EXPECT(equality(Vector2(1.0, 2.0))); + EXPECT(equality(Vector3(1.0, 2.0, 3.0))); + EXPECT(equality((Vector6() << 1.0, 2.0, 3.0, 4.0, 5.0, 6.0).finished())); EXPECT(equality(Matrix_(2, 2, 1.0, 2.0, 3.0, 4.0))); EXPECT(equalityXML(Vector_(4, 1.0, 2.0, 3.0, 4.0))); + EXPECT(equalityXML(Vector2(1.0, 2.0))); + EXPECT(equalityXML(Vector3(1.0, 2.0, 3.0))); + EXPECT(equalityXML((Vector6() << 1.0, 2.0, 3.0, 4.0, 5.0, 6.0).finished())); EXPECT(equalityXML(Matrix_(2, 2, 1.0, 2.0, 3.0, 4.0))); EXPECT(equalityBinary(Vector_(4, 1.0, 2.0, 3.0, 4.0))); + EXPECT(equalityBinary(Vector2(1.0, 2.0))); + EXPECT(equalityBinary(Vector3(1.0, 2.0, 3.0))); + EXPECT(equalityBinary((Vector6() << 1.0, 2.0, 3.0, 4.0, 5.0, 6.0).finished())); EXPECT(equalityBinary(Matrix_(2, 2, 1.0, 2.0, 3.0, 4.0))); }