Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/mpi/detail/content_oarchive.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/mpi/detail/content_oarchive.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,66 @@ +// (C) Copyright 2005 Matthias Troyer + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Authors: Matthias Troyer + +#ifndef BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP +#define BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP + +#include <boost/archive/detail/auto_link_archive.hpp> +#include <boost/archive/basic_archive.hpp> +#include <boost/mpi/detail/ignore_skeleton_oarchive.hpp> +#include <boost/mpi/detail/mpi_datatype_primitive.hpp> +#include <boost/mpi/datatype.hpp> +#include <boost/archive/detail/register_archive.hpp> + +namespace boost { namespace mpi { + +namespace detail { + // an archive wrapper that stores only the data members but not the + // special types defined by the serialization library + // to define the data skeletons (classes, pointers, container sizes, ...) + + class BOOST_MPI_DECL content_oarchive + : public mpi_datatype_primitive, + public ignore_skeleton_oarchive<content_oarchive> + { + public: + content_oarchive() + : committed(false) + {} + + content get_content() + { + if (!committed) + { + // create the content holder only once + c=this->get_mpi_datatype(); + committed=true; + } + return c; + } + + private: + bool committed; + content c; + }; +} // end namespace detail + +template <class T> +const content get_content(const T& x) +{ + detail::content_oarchive ar; + ar << x; + return ar.get_content(); +} + +} } // end namespace boost::mpi + +// required by export +BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::content_oarchive) +BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::ignore_skeleton_oarchive<boost::mpi::detail::content_oarchive>) +BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::detail::content_oarchive) +#endif // BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP