From 666e30a59b136521f1168971a053b55c58fdb536 Mon Sep 17 00:00:00 2001 From: Alex Cunningham Date: Wed, 12 Jun 2013 19:30:21 +0000 Subject: [PATCH] Changed serialization interface to return shared versions of graph/values to avoid copies in matlab --- gtsam/slam/serialization.cpp | 24 ++++++++++++------------ gtsam/slam/serialization.h | 8 ++++---- gtsam/slam/tests/testSerialization.cpp | 8 ++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/gtsam/slam/serialization.cpp b/gtsam/slam/serialization.cpp index a57d82add..d8a1cce06 100644 --- a/gtsam/slam/serialization.cpp +++ b/gtsam/slam/serialization.cpp @@ -208,9 +208,9 @@ std::string gtsam::serializeGraph(const NonlinearFactorGraph& graph) { } /* ************************************************************************* */ -NonlinearFactorGraph gtsam::deserializeGraph(const std::string& serialized_graph) { - NonlinearFactorGraph result; - deserialize(serialized_graph, result); +NonlinearFactorGraph::shared_ptr gtsam::deserializeGraph(const std::string& serialized_graph) { + NonlinearFactorGraph::shared_ptr result(new NonlinearFactorGraph()); + deserialize(serialized_graph, *result); return result; } @@ -220,10 +220,10 @@ std::string gtsam::serializeGraphXML(const NonlinearFactorGraph& graph, const st } /* ************************************************************************* */ -NonlinearFactorGraph gtsam::deserializeGraphXML(const std::string& serialized_graph, +NonlinearFactorGraph::shared_ptr gtsam::deserializeGraphXML(const std::string& serialized_graph, const std::string& name) { - NonlinearFactorGraph result; - deserializeXML(serialized_graph, result, name); + NonlinearFactorGraph::shared_ptr result(new NonlinearFactorGraph()); + deserializeXML(serialized_graph, *result, name); return result; } @@ -233,9 +233,9 @@ std::string gtsam::serializeValues(const Values& values) { } /* ************************************************************************* */ -Values gtsam::deserializeValues(const std::string& serialized_values) { - Values result; - deserialize(serialized_values, result); +Values::shared_ptr gtsam::deserializeValues(const std::string& serialized_values) { + Values::shared_ptr result(new Values()); + deserialize(serialized_values, *result); return result; } @@ -245,10 +245,10 @@ std::string gtsam::serializeValuesXML(const Values& values, const std::string& n } /* ************************************************************************* */ -Values gtsam::deserializeValuesXML(const std::string& serialized_values, +Values::shared_ptr gtsam::deserializeValuesXML(const std::string& serialized_values, const std::string& name) { - Values result; - deserializeXML(serialized_values, result, name); + Values::shared_ptr result(new Values()); + deserializeXML(serialized_values, *result, name); return result; } diff --git a/gtsam/slam/serialization.h b/gtsam/slam/serialization.h index ceb237686..0dde72a8c 100644 --- a/gtsam/slam/serialization.h +++ b/gtsam/slam/serialization.h @@ -16,23 +16,23 @@ namespace gtsam { // Serialize/Deserialize a NonlinearFactorGraph std::string serializeGraph(const NonlinearFactorGraph& graph); -NonlinearFactorGraph deserializeGraph(const std::string& serialized_graph); +NonlinearFactorGraph::shared_ptr deserializeGraph(const std::string& serialized_graph); std::string serializeGraphXML(const NonlinearFactorGraph& graph, const std::string& name = "graph"); -NonlinearFactorGraph deserializeGraphXML(const std::string& serialized_graph, +NonlinearFactorGraph::shared_ptr deserializeGraphXML(const std::string& serialized_graph, const std::string& name = "graph"); // Serialize/Deserialize a Values std::string serializeValues(const Values& values); -Values deserializeValues(const std::string& serialized_values); +Values::shared_ptr deserializeValues(const std::string& serialized_values); std::string serializeValuesXML(const Values& values, const std::string& name = "values"); -Values deserializeValuesXML(const std::string& serialized_values, +Values::shared_ptr deserializeValuesXML(const std::string& serialized_values, const std::string& name = "values"); } // \namespace gtsam diff --git a/gtsam/slam/tests/testSerialization.cpp b/gtsam/slam/tests/testSerialization.cpp index 64d5504da..91b938ad0 100644 --- a/gtsam/slam/tests/testSerialization.cpp +++ b/gtsam/slam/tests/testSerialization.cpp @@ -42,7 +42,7 @@ NonlinearFactorGraph exampleGraph() { TEST( testSerialization, text_graph_serialization ) { NonlinearFactorGraph graph = exampleGraph(); string serialized = serializeGraph(graph); - NonlinearFactorGraph actGraph = deserializeGraph(serialized); + NonlinearFactorGraph actGraph = *deserializeGraph(serialized); EXPECT(assert_equal(graph, actGraph)); } @@ -50,7 +50,7 @@ TEST( testSerialization, text_graph_serialization ) { TEST( testSerialization, xml_graph_serialization ) { NonlinearFactorGraph graph = exampleGraph(); string serialized = serializeGraphXML(graph, "graph1"); - NonlinearFactorGraph actGraph = deserializeGraphXML(serialized, "graph1"); + NonlinearFactorGraph actGraph = *deserializeGraphXML(serialized, "graph1"); EXPECT(assert_equal(graph, actGraph)); } @@ -58,7 +58,7 @@ TEST( testSerialization, xml_graph_serialization ) { TEST( testSerialization, text_values_serialization ) { Values values = exampleValues(); string serialized = serializeValues(values); - Values actValues = deserializeValues(serialized); + Values actValues = *deserializeValues(serialized); EXPECT(assert_equal(values, actValues)); } @@ -66,7 +66,7 @@ TEST( testSerialization, text_values_serialization ) { TEST( testSerialization, xml_values_serialization ) { Values values = exampleValues(); string serialized = serializeValuesXML(values, "values1"); - Values actValues = deserializeValuesXML(serialized, "values1"); + Values actValues = *deserializeValuesXML(serialized, "values1"); EXPECT(assert_equal(values, actValues, 1e-5)); }