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#if BOOST_VERSION / 100 % 1000 == 78 && __APPLE__
25 #ifndef BOOST_ASIO_DISABLE_STD_ALIGNED_ALLOC
26 #define DEFINE_BOOST_ASIO_DISABLE_STD_ALIGNED_ALLOC
27 #define BOOST_ASIO_DISABLE_STD_ALIGNED_ALLOC
30 #include <boost/asio/streambuf.hpp>
32 #ifdef DEFINE_BOOST_ASIO_DISABLE_STD_ALIGNED_ALLOC
33 #undef BOOST_ASIO_DISABLE_STD_ALIGNED_ALLOC
37 #include <boost/asio/streambuf.hpp>
40#include <boost/iostreams/device/array.hpp>
41#include <boost/iostreams/stream.hpp>
42#include <boost/iostreams/stream_buffer.hpp>
45#include <boost/math/special_functions/nonfinite_num_facets.hpp>
49 namespace serialization
61 inline void loadFromText(T &
object,
const std::string & filename)
63 std::ifstream ifs(filename.c_str());
66 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
68 boost::archive::text_iarchive ia(ifs, boost::archive::no_codecvt);
73 const std::string exception_message(filename +
" does not seem to be a valid file.");
74 throw std::invalid_argument(exception_message);
87 inline void saveToText(
const T &
object,
const std::string & filename)
89 std::ofstream ofs(filename.c_str());
92 boost::archive::text_oarchive oa(ofs);
97 const std::string exception_message(filename +
" does not seem to be a valid file.");
98 throw std::invalid_argument(exception_message);
111 inline void loadFromStringStream(T &
object, std::istringstream & is)
113 boost::archive::text_iarchive ia(is, boost::archive::no_codecvt);
126 inline void saveToStringStream(
const T &
object, std::stringstream & ss)
128 boost::archive::text_oarchive oa(ss);
141 inline void loadFromString(T &
object,
const std::string & str)
143 std::istringstream is(str);
144 loadFromStringStream(
object, is);
157 inline std::string saveToString(
const T &
object)
159 std::stringstream ss;
160 saveToStringStream(
object, ss);
174 inline void loadFromXML(T &
object,
const std::string & filename,
const std::string & tag_name)
176 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
178 std::ifstream ifs(filename.c_str());
181 std::locale
const new_loc(ifs.getloc(),
new boost::math::nonfinite_num_get<char>);
183 boost::archive::xml_iarchive ia(ifs, boost::archive::no_codecvt);
184 ia >> boost::serialization::make_nvp(tag_name.c_str(),
object);
188 const std::string exception_message(filename +
" does not seem to be a valid file.");
189 throw std::invalid_argument(exception_message);
204 saveToXML(
const T &
object,
const std::string & filename,
const std::string & tag_name)
206 PINOCCHIO_CHECK_INPUT_ARGUMENT(!tag_name.empty());
208 std::ofstream ofs(filename.c_str());
211 boost::archive::xml_oarchive oa(ofs);
212 oa & boost::serialization::make_nvp(tag_name.c_str(),
object);
216 const std::string exception_message(filename +
" does not seem to be a valid file.");
217 throw std::invalid_argument(exception_message);
230 inline void loadFromBinary(T &
object,
const std::string & filename)
232 std::ifstream ifs(filename.c_str(), std::ios::binary);
235 boost::archive::binary_iarchive ia(ifs);
240 const std::string exception_message(filename +
" does not seem to be a valid file.");
241 throw std::invalid_argument(exception_message);
254 void saveToBinary(
const T &
object,
const std::string & filename)
256 std::ofstream ofs(filename.c_str(), std::ios::binary);
259 boost::archive::binary_oarchive oa(ofs);
264 const std::string exception_message(filename +
" does not seem to be a valid file.");
265 throw std::invalid_argument(exception_message);
278 inline void loadFromBinary(T &
object, boost::asio::streambuf & buffer)
280 boost::archive::binary_iarchive ia(buffer);
293 void saveToBinary(
const T &
object, boost::asio::streambuf & buffer)
295 boost::archive::binary_oarchive oa(buffer);
309 inline void loadFromBinary(T &
object, StaticBuffer & buffer)
311 boost::iostreams::stream_buffer<boost::iostreams::basic_array<char>> stream(
312 buffer.data(), buffer.size());
314 boost::archive::binary_iarchive ia(stream);
328 inline void saveToBinary(
const T &
object, StaticBuffer & buffer)
330 boost::iostreams::stream_buffer<boost::iostreams::basic_array<char>> stream(
331 buffer.data(), buffer.size());
333 boost::archive::binary_oarchive oa(stream);
Main pinocchio namespace.