123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #ifndef BOOST_MPI_PACKED_OARCHIVE_HPP
- #define BOOST_MPI_PACKED_OARCHIVE_HPP
- #include <boost/mpi/datatype.hpp>
- #include <boost/archive/basic_archive.hpp>
- #include <boost/archive/detail/auto_link_archive.hpp>
- #include <boost/archive/detail/common_oarchive.hpp>
- #include <boost/mpi/detail/packed_oprimitive.hpp>
- #include <boost/mpi/detail/binary_buffer_oprimitive.hpp>
- #include <boost/serialization/string.hpp>
- #include <boost/serialization/collection_size_type.hpp>
- #include <boost/serialization/item_version_type.hpp>
- namespace boost { namespace mpi {
- #ifdef BOOST_MPI_HOMOGENEOUS
- typedef binary_buffer_oprimitive oprimitive;
- #else
- typedef packed_oprimitive oprimitive;
- #endif
- class BOOST_MPI_DECL packed_oarchive
- : public oprimitive
- , public archive::detail::common_oarchive<packed_oarchive>
- {
- public:
-
- packed_oarchive( MPI_Comm const & comm, buffer_type & b, unsigned int flags = boost::archive::no_header)
- : oprimitive(b,comm),
- archive::detail::common_oarchive<packed_oarchive>(flags)
- {}
-
- packed_oarchive ( MPI_Comm const & comm, unsigned int flags = boost::archive::no_header)
- : oprimitive(internal_buffer_,comm),
- archive::detail::common_oarchive<packed_oarchive>(flags)
- {}
-
- template<class T>
- void save_override(T const& x, mpl::false_)
- {
- archive::detail::common_oarchive<packed_oarchive>::save_override(x);
- }
-
- template<class T>
- void save_override(T const& x, mpl::true_)
- {
- oprimitive::save(x);
- }
-
- template<class T>
- void save_override(T const& x)
- {
- typedef typename mpl::apply1<use_array_optimization,T>::type use_optimized;
- save_override(x, use_optimized());
- }
-
- void save_override(const archive::class_id_optional_type & ){}
-
- void save_override(const archive::class_name_type & t){
- const std::string s(t);
- * this->This() << s;
- }
- void save_override(const archive::class_id_type & t){
- const boost::int_least16_t x = t;
- * this->This() << x;
- }
- void save_override(const archive::version_type & t){
- const boost::int_least8_t x = t;
- * this->This() << x;
- }
- private:
-
-
- buffer_type internal_buffer_;
- };
- } }
- BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_oarchive)
- BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_oarchive)
- #endif
|