Added boost header
This commit is contained in:
96
test/external/boost/mpi/detail/communicator_sc.hpp
vendored
Normal file
96
test/external/boost/mpi/detail/communicator_sc.hpp
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
// 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.m_data = archive;
|
||||
return result;
|
||||
}
|
||||
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
struct serialized_irecv_data<const skeleton_proxy<T> >
|
||||
{
|
||||
serialized_irecv_data(const communicator& comm, int source, int tag,
|
||||
skeleton_proxy<T> proxy)
|
||||
: comm(comm), source(source), tag(tag), isa(comm),
|
||||
ia(isa.get_skeleton()), proxy(proxy) { }
|
||||
|
||||
void deserialize(status& stat)
|
||||
{
|
||||
isa >> proxy.object;
|
||||
stat.m_count = 1;
|
||||
}
|
||||
|
||||
communicator comm;
|
||||
int source;
|
||||
int tag;
|
||||
std::size_t count;
|
||||
packed_skeleton_iarchive isa;
|
||||
packed_iarchive& ia;
|
||||
skeleton_proxy<T> proxy;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct serialized_irecv_data<skeleton_proxy<T> >
|
||||
: public serialized_irecv_data<const skeleton_proxy<T> >
|
||||
{
|
||||
typedef serialized_irecv_data<const skeleton_proxy<T> > inherited;
|
||||
|
||||
serialized_irecv_data(const communicator& comm, int source, int tag,
|
||||
const skeleton_proxy<T>& proxy)
|
||||
: inherited(comm, source, tag, proxy) { }
|
||||
};
|
||||
}
|
||||
|
||||
} } // end namespace boost::mpi
|
||||
|
||||
#endif // BOOST_MPI_COMMUNICATOR_SC_HPP
|
||||
|
||||
Reference in New Issue
Block a user