5 #ifndef __pinocchio_serialization_archive_hpp__
6 #define __pinocchio_serialization_archive_hpp__
8 #include "pinocchio/serialization/fwd.hpp"
9 #include "pinocchio/serialization/static-buffer.hpp"
15 #include <boost/archive/text_oarchive.hpp>
16 #include <boost/archive/text_iarchive.hpp>
17 #include <boost/archive/xml_iarchive.hpp>
18 #include <boost/archive/xml_oarchive.hpp>
19 #include <boost/archive/binary_iarchive.hpp>
20 #include <boost/archive/binary_oarchive.hpp>
22 #include <boost/asio/streambuf.hpp>
23 #include <boost/iostreams/device/array.hpp>
24 #include <boost/iostreams/stream.hpp>
25 #include <boost/iostreams/stream_buffer.hpp>
28 #include <boost/math/special_functions/nonfinite_num_facets.hpp>
32 namespace serialization
44 inline void loadFromText(T &
object,
45 const std::string & filename)
47 std::ifstream ifs(filename.c_str());
50 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
52 boost::archive::text_iarchive ia(ifs,boost::archive::no_codecvt);
57 const std::string exception_message(filename +
" does not seem to be a valid file.");
58 throw std::invalid_argument(exception_message);
71 inline void saveToText(
const T &
object,
72 const std::string & filename)
74 std::ofstream ofs(filename.c_str());
77 boost::archive::text_oarchive oa(ofs);
82 const std::string exception_message(filename +
" does not seem to be a valid file.");
83 throw std::invalid_argument(exception_message);
96 inline void loadFromStringStream(T &
object,
97 std::istringstream & is)
99 boost::archive::text_iarchive ia(is,boost::archive::no_codecvt);
112 inline void saveToStringStream(
const T &
object,
113 std::stringstream & ss)
115 boost::archive::text_oarchive oa(ss);
128 inline void loadFromString(T &
object,
129 const std::string & str)
131 std::istringstream is(str);
132 loadFromStringStream(
object,is);
145 inline std::string saveToString(
const T &
object)
147 std::stringstream ss;
148 saveToStringStream(
object,ss);
162 inline void loadFromXML(T &
object,
163 const std::string & filename,
164 const std::string & tag_name)
166 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
168 std::ifstream ifs(filename.c_str());
171 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
173 boost::archive::xml_iarchive ia(ifs,boost::archive::no_codecvt);
174 ia >> boost::serialization::make_nvp(tag_name.c_str(),
object);
178 const std::string exception_message(filename +
" does not seem to be a valid file.");
179 throw std::invalid_argument(exception_message);
193 inline void saveToXML(
const T &
object,
194 const std::string & filename,
195 const std::string & tag_name)
197 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
199 std::ofstream ofs(filename.c_str());
202 boost::archive::xml_oarchive oa(ofs);
203 oa & boost::serialization::make_nvp(tag_name.c_str(),
object);
207 const std::string exception_message(filename +
" does not seem to be a valid file.");
208 throw std::invalid_argument(exception_message);
221 inline void loadFromBinary(T &
object,
222 const std::string & filename)
224 std::ifstream ifs(filename.c_str(), std::ios::binary);
227 boost::archive::binary_iarchive ia(ifs);
232 const std::string exception_message(filename +
" does not seem to be a valid file.");
233 throw std::invalid_argument(exception_message);
246 void saveToBinary(
const T &
object,
247 const std::string & filename)
249 std::ofstream ofs(filename.c_str(), std::ios::binary);
252 boost::archive::binary_oarchive oa(ofs);
257 const std::string exception_message(filename +
" does not seem to be a valid file.");
258 throw std::invalid_argument(exception_message);
271 inline void loadFromBinary(T &
object,
272 boost::asio::streambuf & buffer)
274 boost::archive::binary_iarchive ia(buffer);
287 void saveToBinary(
const T &
object,
288 boost::asio::streambuf & buffer)
290 boost::archive::binary_oarchive oa(buffer);
304 inline void loadFromBinary(T &
object,
305 StaticBuffer & buffer)
307 boost::iostreams::stream_buffer< boost::iostreams::basic_array<char> > stream(buffer.data(), buffer.size());
309 boost::archive::binary_iarchive ia(stream);
323 inline void saveToBinary(
const T &
object,
324 StaticBuffer & buffer)
326 boost::iostreams::stream_buffer< boost::iostreams::basic_array<char> > stream(buffer.data(), buffer.size());
328 boost::archive::binary_oarchive oa(stream);
335 #endif // ifndef __pinocchio_serialization_archive_hpp__