Chris@16: // (C) Copyright 2005 Matthias Troyer Chris@16: Chris@16: // Use, modification and distribution is subject to the Boost Software Chris@16: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // Authors: Matthias Troyer Chris@16: Chris@16: #ifndef BOOST_MPI_DETAIL_FORWARD_SKELETON_IARCHIVE_HPP Chris@16: #define BOOST_MPI_DETAIL_FORWARD_SKELETON_IARCHIVE_HPP Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace mpi { namespace detail { Chris@16: Chris@16: template Chris@16: class forward_skeleton_iarchive Chris@16: : public archive::detail::common_iarchive Chris@16: { Chris@16: public: Chris@16: Chris@16: typedef ImplementationArchive implementation_archive_type; Chris@16: Chris@16: forward_skeleton_iarchive(implementation_archive_type& ar) Chris@16: : archive::detail::common_iarchive(archive::no_header), Chris@16: implementation_archive(ar) Chris@16: { Chris@16: } Chris@16: Chris@16: #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS Chris@16: public: Chris@16: #else Chris@16: friend class archive::detail::interface_iarchive; Chris@16: friend class archive::load_access; Chris@16: protected: Chris@16: #endif Chris@16: Chris@16: // intermediate level to support override of operators Chris@16: // for templates in the absence of partial function Chris@16: // template ordering Chris@16: template Chris@16: void load_override(T & t, BOOST_PFTO int) Chris@16: { Chris@16: archive::load(* this->This(), t); Chris@16: } Chris@16: Chris@16: #define BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(T) \ Chris@16: void load_override(T & t , int) \ Chris@16: { \ Chris@16: implementation_archive >> t; \ Chris@16: } Chris@16: Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_optional_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::version_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_reference_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::object_id_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::object_reference_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::tracking_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_name_type) Chris@16: BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(serialization::collection_size_type) Chris@16: Chris@16: void load_override(std::string & s , int) Chris@16: { Chris@16: serialization::collection_size_type length(s.size()); Chris@16: load_override(length,0); Chris@16: s.resize(length); Chris@16: } Chris@16: Chris@16: #undef BOOST_ARCHIVE_FORWARD_IMPLEMENTATION Chris@16: protected: Chris@16: /// the actual archive used to serialize the information we actually want to store Chris@16: implementation_archive_type& implementation_archive; Chris@16: }; Chris@16: Chris@16: Chris@16: } } } // end namespace boost::mpi::detail Chris@16: Chris@16: #endif // BOOST_MPI_DETAIL_FORWARD_SKELETON_IARCHIVE_HPP