gtsam  4.0.0
gtsam
serialization.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
20 #pragma once
21 
22 #include <sstream>
23 #include <fstream>
24 #include <string>
25 
26 // includes for standard serialization types
27 #include <boost/serialization/export.hpp>
28 #include <boost/serialization/optional.hpp>
29 #include <boost/serialization/shared_ptr.hpp>
30 #include <boost/serialization/vector.hpp>
31 #include <boost/serialization/map.hpp>
32 #include <boost/serialization/list.hpp>
33 #include <boost/serialization/deque.hpp>
34 #include <boost/serialization/weak_ptr.hpp>
35 
36 #include <boost/archive/text_oarchive.hpp>
37 #include <boost/archive/text_iarchive.hpp>
38 #include <boost/archive/xml_iarchive.hpp>
39 #include <boost/archive/xml_oarchive.hpp>
40 #include <boost/archive/binary_iarchive.hpp>
41 #include <boost/archive/binary_oarchive.hpp>
42 
43 namespace gtsam {
44 
45 // Serialization directly to strings in compressed format
46 template<class T>
47 std::string serialize(const T& input) {
48  std::ostringstream out_archive_stream;
49  boost::archive::text_oarchive out_archive(out_archive_stream);
50  out_archive << input;
51  return out_archive_stream.str();
52 }
53 
54 template<class T>
55 void deserialize(const std::string& serialized, T& output) {
56  std::istringstream in_archive_stream(serialized);
57  boost::archive::text_iarchive in_archive(in_archive_stream);
58  in_archive >> output;
59 }
60 
61 template<class T>
62 bool serializeToFile(const T& input, const std::string& filename) {
63  std::ofstream out_archive_stream(filename.c_str());
64  if (!out_archive_stream.is_open())
65  return false;
66  boost::archive::text_oarchive out_archive(out_archive_stream);
67  out_archive << input;
68  out_archive_stream.close();
69  return true;
70 }
71 
72 template<class T>
73 bool deserializeFromFile(const std::string& filename, T& output) {
74  std::ifstream in_archive_stream(filename.c_str());
75  if (!in_archive_stream.is_open())
76  return false;
77  boost::archive::text_iarchive in_archive(in_archive_stream);
78  in_archive >> output;
79  in_archive_stream.close();
80  return true;
81 }
82 
83 // Serialization to XML format with named structures
84 template<class T>
85 std::string serializeXML(const T& input, const std::string& name="data") {
86  std::ostringstream out_archive_stream;
87  boost::archive::xml_oarchive out_archive(out_archive_stream);
88  out_archive << boost::serialization::make_nvp(name.c_str(), input);
89  return out_archive_stream.str();
90 }
91 
92 template<class T>
93 void deserializeXML(const std::string& serialized, T& output, const std::string& name="data") {
94  std::istringstream in_archive_stream(serialized);
95  boost::archive::xml_iarchive in_archive(in_archive_stream);
96  in_archive >> boost::serialization::make_nvp(name.c_str(), output);
97 }
98 
99 template<class T>
100 bool serializeToXMLFile(const T& input, const std::string& filename, const std::string& name="data") {
101  std::ofstream out_archive_stream(filename.c_str());
102  if (!out_archive_stream.is_open())
103  return false;
104  boost::archive::xml_oarchive out_archive(out_archive_stream);
105  out_archive << boost::serialization::make_nvp(name.c_str(), input);;
106  out_archive_stream.close();
107  return true;
108 }
109 
110 template<class T>
111 bool deserializeFromXMLFile(const std::string& filename, T& output, const std::string& name="data") {
112  std::ifstream in_archive_stream(filename.c_str());
113  if (!in_archive_stream.is_open())
114  return false;
115  boost::archive::xml_iarchive in_archive(in_archive_stream);
116  in_archive >> boost::serialization::make_nvp(name.c_str(), output);
117  in_archive_stream.close();
118  return true;
119 }
120 
121 // Serialization to binary format with named structures
122 template<class T>
123 std::string serializeBinary(const T& input, const std::string& name="data") {
124  std::ostringstream out_archive_stream;
125  boost::archive::binary_oarchive out_archive(out_archive_stream);
126  out_archive << boost::serialization::make_nvp(name.c_str(), input);
127  return out_archive_stream.str();
128 }
129 
130 template<class T>
131 void deserializeBinary(const std::string& serialized, T& output, const std::string& name="data") {
132  std::istringstream in_archive_stream(serialized);
133  boost::archive::binary_iarchive in_archive(in_archive_stream);
134  in_archive >> boost::serialization::make_nvp(name.c_str(), output);
135 }
136 
137 template<class T>
138 bool serializeToBinaryFile(const T& input, const std::string& filename, const std::string& name="data") {
139  std::ofstream out_archive_stream(filename.c_str());
140  if (!out_archive_stream.is_open())
141  return false;
142  boost::archive::binary_oarchive out_archive(out_archive_stream);
143  out_archive << boost::serialization::make_nvp(name.c_str(), input);
144  out_archive_stream.close();
145  return true;
146 }
147 
148 template<class T>
149 bool deserializeFromBinaryFile(const std::string& filename, T& output, const std::string& name="data") {
150  std::ifstream in_archive_stream(filename.c_str());
151  if (!in_archive_stream.is_open())
152  return false;
153  boost::archive::binary_iarchive in_archive(in_archive_stream);
154  in_archive >> boost::serialization::make_nvp(name.c_str(), output);
155  in_archive_stream.close();
156  return true;
157 }
158 
159 } // \namespace gtsam
Global functions in a separate testing namespace.
Definition: chartTesting.h:28