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.