diff options
Diffstat (limited to 'boost/mpi/detail/mpi_datatype_primitive.hpp')
-rw-r--r-- | boost/mpi/detail/mpi_datatype_primitive.hpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/boost/mpi/detail/mpi_datatype_primitive.hpp b/boost/mpi/detail/mpi_datatype_primitive.hpp index 3c22245d87..0a6078548f 100644 --- a/boost/mpi/detail/mpi_datatype_primitive.hpp +++ b/boost/mpi/detail/mpi_datatype_primitive.hpp @@ -49,7 +49,11 @@ public: : is_committed(false), origin() { +#if defined(MPI_VERSION) && MPI_VERSION >= 2 + BOOST_MPI_CHECK_RESULT(MPI_Get_address,(const_cast<void*>(orig), &origin)); +#else BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast<void*>(orig), &origin)); +#endif } void save_binary(void const *address, std::size_t count) @@ -72,7 +76,8 @@ public: { if (!is_committed) { - BOOST_MPI_CHECK_RESULT(MPI_Type_struct, +#if defined(MPI_VERSION) && MPI_VERSION >= 2 + BOOST_MPI_CHECK_RESULT(MPI_Type_create_struct, ( addresses.size(), boost::serialization::detail::get_data(lengths), @@ -80,9 +85,18 @@ public: boost::serialization::detail::get_data(types), &datatype_ )); - +#else + BOOST_MPI_CHECK_RESULT(MPI_Type_struct, + ( + addresses.size(), + boost::serialization::detail::get_data(lengths), + boost::serialization::detail::get_data(addresses), + boost::serialization::detail::get_data(types), + &datatype_ + )); +#endif BOOST_MPI_CHECK_RESULT(MPI_Type_commit,(&datatype_)); - + is_committed = true; } @@ -105,8 +119,11 @@ private: // store address, type and length MPI_Aint a; - BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast<void*>(p), &a)); - +#if defined(MPI_VERSION) && MPI_VERSION >= 2 + BOOST_MPI_CHECK_RESULT(MPI_Get_address,(const_cast<void*>(p), &a)); +#else + BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast<void*>(p), &a)); +#endif addresses.push_back(a-origin); types.push_back(t); lengths.push_back(l); |