Jonathan Wakely 30150e
From babaa35f51d8b009eba762bc50a5290906b4b0ca Mon Sep 17 00:00:00 2001
Jonathan Wakely 30150e
From: Jonathan Wakely <jwakely@redhat.com>
Jonathan Wakely 30150e
Date: Thu, 26 Jan 2017 20:15:19 +0000
Jonathan Wakely 30150e
Subject: [PATCH] Replace boost::serialization::detail::get_data function.
Jonathan Wakely 30150e
Jonathan Wakely 30150e
---
Jonathan Wakely 30150e
 include/boost/mpi/detail/mpi_datatype_primitive.hpp | 19 ++++++++++++-------
Jonathan Wakely 30150e
 include/boost/mpi/detail/packed_iprimitive.hpp      |  8 ++++++--
Jonathan Wakely 30150e
 include/boost/mpi/detail/packed_oprimitive.hpp      |  8 ++++++--
Jonathan Wakely 30150e
 3 files changed, 24 insertions(+), 11 deletions(-)
Jonathan Wakely 30150e
Jonathan Wakely 30150e
diff --git a/include/boost/mpi/detail/mpi_datatype_primitive.hpp b/include/boost/mpi/detail/mpi_datatype_primitive.hpp
Jonathan Wakely 30150e
index c230055..b95fc38 100644
Jonathan Wakely 30150e
--- a/include/boost/mpi/detail/mpi_datatype_primitive.hpp
Jonathan Wakely 30150e
+++ b/include/boost/mpi/detail/mpi_datatype_primitive.hpp
Jonathan Wakely 30150e
@@ -25,7 +25,6 @@ namespace std{
Jonathan Wakely 30150e
 #include <boost/assert.hpp>
Jonathan Wakely 30150e
 #include <boost/mpl/placeholders.hpp>
Jonathan Wakely 30150e
 #include <boost/serialization/array.hpp>
Jonathan Wakely 30150e
-#include <boost/serialization/detail/get_data.hpp>
Jonathan Wakely 30150e
 #include <stdexcept>
Jonathan Wakely 30150e
 #include <iostream>
Jonathan Wakely 30150e
 #include <vector>
Jonathan Wakely 30150e
@@ -80,18 +79,18 @@ class mpi_datatype_primitive
Jonathan Wakely 30150e
        BOOST_MPI_CHECK_RESULT(MPI_Type_create_struct,
Jonathan Wakely 30150e
                     (
Jonathan Wakely 30150e
                       addresses.size(),
Jonathan Wakely 30150e
-                      boost::serialization::detail::get_data(lengths),
Jonathan Wakely 30150e
-                      boost::serialization::detail::get_data(addresses),
Jonathan Wakely 30150e
-                      boost::serialization::detail::get_data(types),
Jonathan Wakely 30150e
+                      get_data(lengths),
Jonathan Wakely 30150e
+                      get_data(addresses),
Jonathan Wakely 30150e
+                      get_data(types),
Jonathan Wakely 30150e
                       &datatype_
Jonathan Wakely 30150e
                     ));
Jonathan Wakely 30150e
 #else
Jonathan Wakely 30150e
         BOOST_MPI_CHECK_RESULT(MPI_Type_struct,
Jonathan Wakely 30150e
                                (
Jonathan Wakely 30150e
                                 addresses.size(),
Jonathan Wakely 30150e
-                                boost::serialization::detail::get_data(lengths),
Jonathan Wakely 30150e
-                                boost::serialization::detail::get_data(addresses),
Jonathan Wakely 30150e
-                                boost::serialization::detail::get_data(types),
Jonathan Wakely 30150e
+                                get_data(lengths),
Jonathan Wakely 30150e
+                                get_data(addresses),
Jonathan Wakely 30150e
+                                get_data(types),
Jonathan Wakely 30150e
                                 &datatype_
Jonathan Wakely 30150e
                                 ));
Jonathan Wakely 30150e
 #endif
Jonathan Wakely 30150e
@@ -129,6 +128,12 @@ class mpi_datatype_primitive
Jonathan Wakely 30150e
       lengths.push_back(l);
Jonathan Wakely 30150e
     }
Jonathan Wakely 30150e
 
Jonathan Wakely 30150e
+    template <class T>
Jonathan Wakely 30150e
+    static T* get_data(std::vector<T>& v)
Jonathan Wakely 30150e
+    {
Jonathan Wakely 30150e
+      return v.empty() ? 0 : &(v[0]);
Jonathan Wakely 30150e
+    }
Jonathan Wakely 30150e
+
Jonathan Wakely 30150e
     std::vector<MPI_Aint> addresses;
Jonathan Wakely 30150e
     std::vector<MPI_Datatype> types;
Jonathan Wakely 30150e
     std::vector<int> lengths;
Jonathan Wakely 30150e
diff --git a/include/boost/mpi/detail/packed_iprimitive.hpp b/include/boost/mpi/detail/packed_iprimitive.hpp
Jonathan Wakely 30150e
index 7080cbf..227dc8e 100644
Jonathan Wakely 30150e
--- a/include/boost/mpi/detail/packed_iprimitive.hpp
Jonathan Wakely 30150e
+++ b/include/boost/mpi/detail/packed_iprimitive.hpp
Jonathan Wakely 30150e
@@ -16,7 +16,6 @@
Jonathan Wakely 30150e
 #include <boost/mpi/exception.hpp>
Jonathan Wakely 30150e
 #include <boost/assert.hpp>
Jonathan Wakely 30150e
 #include <boost/serialization/array.hpp>
Jonathan Wakely 30150e
-#include <boost/serialization/detail/get_data.hpp>
Jonathan Wakely 30150e
 #include <vector>
Jonathan Wakely 30150e
 #include <boost/mpi/allocator.hpp>
Jonathan Wakely 30150e
 
Jonathan Wakely 30150e
@@ -104,7 +103,12 @@ class BOOST_MPI_DECL packed_iprimitive
Jonathan Wakely 30150e
     void load_impl(void * p, MPI_Datatype t, int l)
Jonathan Wakely 30150e
     {
Jonathan Wakely 30150e
       BOOST_MPI_CHECK_RESULT(MPI_Unpack,
Jonathan Wakely 30150e
-        (const_cast<char*>(boost::serialization::detail::get_data(buffer_)), buffer_.size(), &position, p, l, t, comm));
Jonathan Wakely 30150e
+        (get_data(buffer_), buffer_.size(), &position, p, l, t, comm));
Jonathan Wakely 30150e
+    }
Jonathan Wakely 30150e
+
Jonathan Wakely 30150e
+    static buffer_type::value_type* get_data(buffer_type& b)
Jonathan Wakely 30150e
+    {
Jonathan Wakely 30150e
+      return b.empty() ? 0 : &(b[0]);
Jonathan Wakely 30150e
     }
Jonathan Wakely 30150e
 
Jonathan Wakely 30150e
     buffer_type & buffer_;
Jonathan Wakely 30150e
diff --git a/include/boost/mpi/detail/packed_oprimitive.hpp b/include/boost/mpi/detail/packed_oprimitive.hpp
Jonathan Wakely 30150e
index fbcde9a..3c81a70 100644
Jonathan Wakely 30150e
--- a/include/boost/mpi/detail/packed_oprimitive.hpp
Jonathan Wakely 30150e
+++ b/include/boost/mpi/detail/packed_oprimitive.hpp
Jonathan Wakely 30150e
@@ -15,7 +15,6 @@
Jonathan Wakely 30150e
 
Jonathan Wakely 30150e
 #include <boost/mpi/datatype.hpp>
Jonathan Wakely 30150e
 #include <boost/mpi/exception.hpp>
Jonathan Wakely 30150e
-#include <boost/serialization/detail/get_data.hpp>
Jonathan Wakely 30150e
 #include <boost/serialization/array.hpp>
Jonathan Wakely 30150e
 #include <boost/assert.hpp>
Jonathan Wakely 30150e
 #include <vector>
Jonathan Wakely 30150e
@@ -103,13 +102,18 @@ class BOOST_MPI_DECL packed_oprimitive
Jonathan Wakely 30150e
 
Jonathan Wakely 30150e
       // pack the data into the buffer
Jonathan Wakely 30150e
       BOOST_MPI_CHECK_RESULT(MPI_Pack,
Jonathan Wakely 30150e
-      (const_cast<void*>(p), l, t, boost::serialization::detail::get_data(buffer_), buffer_.size(), &position, comm));
Jonathan Wakely 30150e
+      (const_cast<void*>(p), l, t, get_data(buffer_), buffer_.size(), &position, comm));
Jonathan Wakely 30150e
       // reduce the buffer size if needed
Jonathan Wakely 30150e
       BOOST_ASSERT(std::size_t(position) <= buffer_.size());
Jonathan Wakely 30150e
       if (std::size_t(position) < buffer_.size())
Jonathan Wakely 30150e
           buffer_.resize(position);
Jonathan Wakely 30150e
     }
Jonathan Wakely 30150e
 
Jonathan Wakely 30150e
+    static buffer_type::value_type* get_data(buffer_type& b)
Jonathan Wakely 30150e
+    {
Jonathan Wakely 30150e
+      return b.empty() ? 0 : &(b[0]);
Jonathan Wakely 30150e
+    }
Jonathan Wakely 30150e
+
Jonathan Wakely 30150e
   buffer_type& buffer_;
Jonathan Wakely 30150e
   mutable std::size_t size_;
Jonathan Wakely 30150e
   MPI_Comm comm;