Added serialization functions to Fast* containers (wrappers around STL containers that use a boost pool allocator for speed)

release/4.3a0
Richard Roberts 2012-02-08 23:11:41 +00:00
parent 0d2a9018e3
commit 8885b33191
5 changed files with 89 additions and 4 deletions

View File

@ -20,6 +20,8 @@
#include <list>
#include <boost/pool/pool_alloc.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/list.hpp>
namespace gtsam {
@ -51,6 +53,14 @@ public:
/** Copy constructor from the base map class */
FastList(const Base& x) : Base(x) {}
private:
/** 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);
}
};
}

View File

@ -20,7 +20,8 @@
#include <map>
#include <boost/pool/pool_alloc.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/map.hpp>
namespace gtsam {
@ -52,12 +53,12 @@ public:
/** Copy constructor from the base map class */
FastMap(const Base& x) : Base(x) {}
private:
private:
/** Serialization function */
friend class boost::serialization::access;
template<class ARCHIVE>
void serialize(ARCHIVE & ar, const unsigned int version) {
ar & boost::serialization::base_object<Base>(*this);
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
}
};

View File

@ -25,6 +25,8 @@
#include <boost/pool/pool_alloc.hpp>
#include <boost/mpl/has_xxx.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/set.hpp>
BOOST_MPL_HAS_XXX_TRAIT_DEF(print)
@ -74,6 +76,14 @@ public:
/** Check for equality within tolerance to implement Testable */
bool equals(const FastSet<VALUE>& other, double tol = 1e-9) const { return FastSetTestableHelper<VALUE>::equals(*this, other, tol); }
private:
/** 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);
}
};
// This is the default Testable interface for *non*Testable elements, which

View File

@ -20,6 +20,8 @@
#include <vector>
#include <boost/pool/pool_alloc.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/vector.hpp>
namespace gtsam {
@ -56,6 +58,14 @@ public:
/** Copy constructor from the base map class */
FastVector(const Base& x) : Base(x) {}
private:
/** 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);
}
};
}

View File

@ -18,6 +18,10 @@
#include <gtsam/base/Matrix.h>
#include <gtsam/base/Vector.h>
#include <gtsam/base/FastList.h>
#include <gtsam/base/FastMap.h>
#include <gtsam/base/FastSet.h>
#include <gtsam/base/FastVector.h>
#include <gtsam/base/serializationTestHelpers.h>
#include <CppUnitLite/TestHarness.h>
@ -26,6 +30,53 @@ using namespace std;
using namespace gtsam;
using namespace gtsam::serializationTestHelpers;
Vector v1 = Vector_(2, 1.0, 2.0);
Vector v2 = Vector_(2, 3.0, 4.0);
Vector v3 = Vector_(2, 5.0, 6.0);
/* ************************************************************************* */
TEST (Serialization, FastList) {
FastList<Vector> list;
list.push_back(v1);
list.push_back(v2);
list.push_back(v3);
EXPECT(equality(list));
EXPECT(equalityXML(list));
}
/* ************************************************************************* */
TEST (Serialization, FastMap) {
FastMap<int, Vector> map;
map.insert(make_pair(1, v1));
map.insert(make_pair(2, v2));
map.insert(make_pair(3, v3));
EXPECT(equality(map));
EXPECT(equalityXML(map));
}
/* ************************************************************************* */
TEST (Serialization, FastSet) {
FastSet<double> set;
set.insert(1.0);
set.insert(2.0);
set.insert(3.0);
EXPECT(equality(set));
EXPECT(equalityXML(set));
}
/* ************************************************************************* */
TEST (Serialization, FastVector) {
FastVector<Vector> vector;
vector.push_back(v1);
vector.push_back(v2);
vector.push_back(v3);
EXPECT(equality(vector));
EXPECT(equalityXML(vector));
}
/* ************************************************************************* */
TEST (Serialization, matrix_vector) {
@ -36,6 +87,9 @@ TEST (Serialization, matrix_vector) {
EXPECT(equalityXML<Matrix>(Matrix_(2, 2, 1.0, 2.0, 3.0, 4.0)));
}
/* ************************************************************************* */
/* ************************************************************************* */
int main() { TestResult tr; return TestRegistry::runAllTests(tr); }
/* ************************************************************************* */