communicator_sc.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 97 行

HPP
97
字号
// 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_HPPnamespace boost { namespace mpi {template<typename T>voidcommunicator::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>statuscommunicator::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>requestcommunicator::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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?