annotate DEPENDENCIES/generic/include/boost/mpi/detail/content_oarchive.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // (C) Copyright 2005 Matthias Troyer
Chris@16 2
Chris@16 3 // Use, modification and distribution is subject to the Boost Software
Chris@16 4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 5 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6
Chris@16 7 // Authors: Matthias Troyer
Chris@16 8
Chris@16 9 #ifndef BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP
Chris@16 10 #define BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP
Chris@16 11
Chris@16 12 #include <boost/archive/detail/auto_link_archive.hpp>
Chris@16 13 #include <boost/archive/basic_archive.hpp>
Chris@16 14 #include <boost/mpi/detail/ignore_skeleton_oarchive.hpp>
Chris@16 15 #include <boost/mpi/detail/mpi_datatype_primitive.hpp>
Chris@16 16 #include <boost/mpi/datatype.hpp>
Chris@16 17 #include <boost/archive/detail/register_archive.hpp>
Chris@16 18
Chris@16 19 namespace boost { namespace mpi {
Chris@16 20
Chris@16 21 namespace detail {
Chris@16 22 // an archive wrapper that stores only the data members but not the
Chris@16 23 // special types defined by the serialization library
Chris@16 24 // to define the data skeletons (classes, pointers, container sizes, ...)
Chris@16 25
Chris@16 26 class BOOST_MPI_DECL content_oarchive
Chris@16 27 : public mpi_datatype_primitive,
Chris@16 28 public ignore_skeleton_oarchive<content_oarchive>
Chris@16 29 {
Chris@16 30 public:
Chris@16 31 content_oarchive()
Chris@16 32 : committed(false)
Chris@16 33 {}
Chris@16 34
Chris@16 35 content get_content()
Chris@16 36 {
Chris@16 37 if (!committed)
Chris@16 38 {
Chris@16 39 // create the content holder only once
Chris@16 40 c=this->get_mpi_datatype();
Chris@16 41 committed=true;
Chris@16 42 }
Chris@16 43 return c;
Chris@16 44 }
Chris@16 45
Chris@16 46 private:
Chris@16 47 bool committed;
Chris@16 48 content c;
Chris@16 49 };
Chris@16 50 } // end namespace detail
Chris@16 51
Chris@16 52 template <class T>
Chris@16 53 const content get_content(const T& x)
Chris@16 54 {
Chris@16 55 detail::content_oarchive ar;
Chris@16 56 ar << x;
Chris@16 57 return ar.get_content();
Chris@16 58 }
Chris@16 59
Chris@16 60 } } // end namespace boost::mpi
Chris@16 61
Chris@16 62 // required by export
Chris@16 63 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::content_oarchive)
Chris@16 64 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::ignore_skeleton_oarchive<boost::mpi::detail::content_oarchive>)
Chris@16 65 BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::detail::content_oarchive)
Chris@16 66 #endif // BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP