/Src/Dependencies/Boost/boost/mpi/detail/communicator_sc.hpp
http://hadesmem.googlecode.com/ · C++ Header · 96 lines · 72 code · 17 blank · 7 comment · 0 complexity · c5868bdf9531a4a22f60b6d8651bdbfb MD5 · raw file
- // 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