123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
- // 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)
- // Skeleton and content support for communicators
- // This header should be included only after both communicator.hpp and
- // skeleton_and_content.hpp have been included.
- #ifndef BOOST_MPI_COMMUNICATOR_SC_HPP
- #define BOOST_MPI_COMMUNICATOR_SC_HPP
- namespace boost { namespace mpi {
- template<typename T>
- void
- communicator::send(int dest, int tag, const skeleton_proxy<T>& proxy) const
- {
- packed_skeleton_oarchive ar(*this);
- ar << proxy.object;
- send(dest, tag, ar);
- }
- template<typename T>
- status
- communicator::recv(int source, int tag, const skeleton_proxy<T>& proxy) const
- {
- packed_skeleton_iarchive ar(*this);
- status result = recv(source, tag, ar);
- ar >> proxy.object;
- return result;
- }
- template<typename T>
- status communicator::recv(int source, int tag, skeleton_proxy<T>& proxy) const
- {
- packed_skeleton_iarchive ar(*this);
- status result = recv(source, tag, ar);
- ar >> proxy.object;
- return result;
- }
- template<typename T>
- request
- communicator::isend(int dest, int tag, const skeleton_proxy<T>& proxy) const
- {
- shared_ptr<packed_skeleton_oarchive>
- archive(new packed_skeleton_oarchive(*this));
- *archive << proxy.object;
- request result = isend(dest, tag, *archive);
- result.preserve(archive);
- return result;
- }
- } } // end namespace boost::mpi
- #endif // BOOST_MPI_COMMUNICATOR_SC_HPP
|