5 #ifndef __pinocchio_serialization_archive_hpp__
6 #define __pinocchio_serialization_archive_hpp__
8 #include "pinocchio/serialization/fwd.hpp"
14 #include <boost/archive/text_oarchive.hpp>
15 #include <boost/archive/text_iarchive.hpp>
16 #include <boost/archive/xml_iarchive.hpp>
17 #include <boost/archive/xml_oarchive.hpp>
18 #include <boost/archive/binary_iarchive.hpp>
19 #include <boost/archive/binary_oarchive.hpp>
21 #include <boost/asio/streambuf.hpp>
24 #include <boost/math/special_functions/nonfinite_num_facets.hpp>
28 namespace serialization
40 inline void loadFromText(T &
object,
41 const std::string & filename)
43 std::ifstream ifs(filename.c_str());
46 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
48 boost::archive::text_iarchive ia(ifs,boost::archive::no_codecvt);
53 const std::string exception_message(filename +
" does not seem to be a valid file.");
54 throw std::invalid_argument(exception_message);
67 inline void saveToText(
const T &
object,
68 const std::string & filename)
70 std::ofstream ofs(filename.c_str());
73 boost::archive::text_oarchive oa(ofs);
78 const std::string exception_message(filename +
" does not seem to be a valid file.");
79 throw std::invalid_argument(exception_message);
92 inline void loadFromStringStream(T &
object,
93 std::istringstream & is)
95 boost::archive::text_iarchive ia(is,boost::archive::no_codecvt);
108 inline void saveToStringStream(
const T &
object,
109 std::stringstream & ss)
111 boost::archive::text_oarchive oa(ss);
124 inline void loadFromString(T &
object,
125 const std::string & str)
127 std::istringstream is(str);
128 loadFromStringStream(
object,is);
141 inline std::string saveToString(
const T &
object)
143 std::stringstream ss;
144 saveToStringStream(
object,ss);
158 inline void loadFromXML(T &
object,
159 const std::string & filename,
160 const std::string & tag_name)
162 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
164 std::ifstream ifs(filename.c_str());
167 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
169 boost::archive::xml_iarchive ia(ifs,boost::archive::no_codecvt);
170 ia >> boost::serialization::make_nvp(tag_name.c_str(),
object);
174 const std::string exception_message(filename +
" does not seem to be a valid file.");
175 throw std::invalid_argument(exception_message);
189 inline void saveToXML(
const T &
object,
190 const std::string & filename,
191 const std::string & tag_name)
193 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
195 std::ofstream ofs(filename.c_str());
198 boost::archive::xml_oarchive oa(ofs);
199 oa & boost::serialization::make_nvp(tag_name.c_str(),
object);
203 const std::string exception_message(filename +
" does not seem to be a valid file.");
204 throw std::invalid_argument(exception_message);
217 inline void loadFromBinary(T &
object,
218 const std::string & filename)
220 std::ifstream ifs(filename.c_str(), std::ios::binary);
223 boost::archive::binary_iarchive ia(ifs);
228 const std::string exception_message(filename +
" does not seem to be a valid file.");
229 throw std::invalid_argument(exception_message);
242 void saveToBinary(
const T &
object,
243 const std::string & filename)
245 std::ofstream ofs(filename.c_str(), std::ios::binary);
248 boost::archive::binary_oarchive oa(ofs);
253 const std::string exception_message(filename +
" does not seem to be a valid file.");
254 throw std::invalid_argument(exception_message);
267 inline void loadFromBinary(T &
object,
268 boost::asio::streambuf & buffer)
270 boost::archive::binary_iarchive ia(buffer);
283 void saveToBinary(
const T &
object,
284 boost::asio::streambuf & buffer)
286 boost::archive::binary_oarchive oa(buffer);
293 #endif // ifndef __pinocchio_serialization_archive_hpp__