61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
|
// 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
|
||
|
|