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>
22 #include <boost/math/special_functions/nonfinite_num_facets.hpp>
26 namespace serialization
38 inline void loadFromText(T &
object,
39 const std::string & filename)
41 std::ifstream ifs(filename.c_str());
44 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
46 boost::archive::text_iarchive ia(ifs,boost::archive::no_codecvt);
51 const std::string exception_message(filename +
" does not seem to be a valid file.");
52 throw std::invalid_argument(exception_message);
65 inline void saveToText(
const T &
object,
66 const std::string & filename)
68 std::ofstream ofs(filename.c_str());
71 boost::archive::text_oarchive oa(ofs);
76 const std::string exception_message(filename +
" does not seem to be a valid file.");
77 throw std::invalid_argument(exception_message);
90 inline void loadFromStringStream(T &
object,
91 std::istringstream & is)
93 boost::archive::text_iarchive ia(is,boost::archive::no_codecvt);
106 inline void saveToStringStream(
const T &
object,
107 std::stringstream & ss)
109 boost::archive::text_oarchive oa(ss);
122 inline void loadFromString(T &
object,
123 const std::string & str)
125 std::istringstream is(str);
126 loadFromStringStream(
object,is);
139 inline std::string saveToString(
const T &
object)
141 std::stringstream ss;
142 saveToStringStream(
object,ss);
156 inline void loadFromXML(T &
object,
157 const std::string & filename,
158 const std::string & tag_name)
160 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
162 std::ifstream ifs(filename.c_str());
165 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
167 boost::archive::xml_iarchive ia(ifs,boost::archive::no_codecvt);
168 ia >> boost::serialization::make_nvp(tag_name.c_str(),
object);
172 const std::string exception_message(filename +
" does not seem to be a valid file.");
173 throw std::invalid_argument(exception_message);
187 inline void saveToXML(
const T &
object,
188 const std::string & filename,
189 const std::string & tag_name)
191 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
193 std::ofstream ofs(filename.c_str());
196 boost::archive::xml_oarchive oa(ofs);
197 oa & boost::serialization::make_nvp(tag_name.c_str(),
object);
201 const std::string exception_message(filename +
" does not seem to be a valid file.");
202 throw std::invalid_argument(exception_message);
215 inline void loadFromBinary(T &
object,
216 const std::string & filename)
218 std::ifstream ifs(filename.c_str(), std::ios::binary);
221 boost::archive::binary_iarchive ia(ifs);
226 const std::string exception_message(filename +
" does not seem to be a valid file.");
227 throw std::invalid_argument(exception_message);
240 void saveToBinary(
const T &
object,
241 const std::string & filename)
243 std::ofstream ofs(filename.c_str(), std::ios::binary);
246 boost::archive::binary_oarchive oa(ofs);
251 const std::string exception_message(filename +
" does not seem to be a valid file.");
252 throw std::invalid_argument(exception_message);
259 #endif // ifndef __pinocchio_serialization_archive_hpp__