From 33a8f15b457e1a2acecc93a7cb8eecef75c30353 Mon Sep 17 00:00:00 2001 From: Matthias Troyer Date: Thu, 6 Aug 2009 20:41:28 +0000 Subject: [PATCH] Fixed trac issue 3261 [SVN r55438] --- include/boost/mpi/detail/forward_skeleton_iarchive.hpp | 7 +++++++ include/boost/mpi/detail/forward_skeleton_oarchive.hpp | 5 +++++ include/boost/mpi/detail/ignore_iprimitive.hpp | 2 +- include/boost/mpi/detail/ignore_oprimitive.hpp | 4 ++-- include/boost/mpi/detail/ignore_skeleton_oarchive.hpp | 7 +++++++ include/boost/mpi/detail/packed_iprimitive.hpp | 6 +++--- include/boost/mpi/detail/packed_oprimitive.hpp | 6 +++--- 7 files changed, 28 insertions(+), 9 deletions(-) diff --git a/include/boost/mpi/detail/forward_skeleton_iarchive.hpp b/include/boost/mpi/detail/forward_skeleton_iarchive.hpp index b5dfed0..4d0ef7e 100644 --- a/include/boost/mpi/detail/forward_skeleton_iarchive.hpp +++ b/include/boost/mpi/detail/forward_skeleton_iarchive.hpp @@ -65,6 +65,13 @@ BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::tracking_type) BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_name_type) BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(serialization::collection_size_type) + void load_override(std::string & s , int) + { + serialization::collection_size_type length(s.size()); + load_override(length,0); + s.resize(length); + } + #undef BOOST_ARCHIVE_FORWARD_IMPLEMENTATION protected: /// the actual archive used to serialize the information we actually want to store diff --git a/include/boost/mpi/detail/forward_skeleton_oarchive.hpp b/include/boost/mpi/detail/forward_skeleton_oarchive.hpp index 633189f..6aab053 100644 --- a/include/boost/mpi/detail/forward_skeleton_oarchive.hpp +++ b/include/boost/mpi/detail/forward_skeleton_oarchive.hpp @@ -66,6 +66,11 @@ BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::tracking_type) BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_name_type) BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(serialization::collection_size_type) + void save_override(std::string const & t , int) + { + save_override(serialization::collection_size_type(t.size()),0); + } + #undef BOOST_ARCHIVE_FORWARD_IMPLEMENTATION protected: diff --git a/include/boost/mpi/detail/ignore_iprimitive.hpp b/include/boost/mpi/detail/ignore_iprimitive.hpp index 2a3eea1..9a8ece5 100644 --- a/include/boost/mpi/detail/ignore_iprimitive.hpp +++ b/include/boost/mpi/detail/ignore_iprimitive.hpp @@ -52,7 +52,7 @@ public: /// don't do anything when loading primitive types template void load(T & t) - { + { } }; diff --git a/include/boost/mpi/detail/ignore_oprimitive.hpp b/include/boost/mpi/detail/ignore_oprimitive.hpp index 476f2b4..9070ea7 100644 --- a/include/boost/mpi/detail/ignore_oprimitive.hpp +++ b/include/boost/mpi/detail/ignore_oprimitive.hpp @@ -31,8 +31,8 @@ public: /// don't do anything when saving binary data void save_binary(const void *, std::size_t ) - { - } + { + } /// don't do anything when saving arrays template diff --git a/include/boost/mpi/detail/ignore_skeleton_oarchive.hpp b/include/boost/mpi/detail/ignore_skeleton_oarchive.hpp index 0fec02e..ce77bd7 100644 --- a/include/boost/mpi/detail/ignore_skeleton_oarchive.hpp +++ b/include/boost/mpi/detail/ignore_skeleton_oarchive.hpp @@ -16,6 +16,7 @@ #include #include #include +#include namespace boost { namespace mpi { namespace detail { @@ -60,6 +61,12 @@ BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::tracking_type) BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::class_name_type) BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(serialization::collection_size_type) + void save_override(std::string const & s, int) + { + if (s.size()) + save_override(serialization::make_array(s.data(),s.size()),0); + } + #undef BOOST_ARCHIVE_IGNORE_IMPLEMENTATION }; diff --git a/include/boost/mpi/detail/packed_iprimitive.hpp b/include/boost/mpi/detail/packed_iprimitive.hpp index 03d1c80..58ba6bf 100644 --- a/include/boost/mpi/detail/packed_iprimitive.hpp +++ b/include/boost/mpi/detail/packed_iprimitive.hpp @@ -97,15 +97,15 @@ public: s.resize(l); // note breaking a rule here - could be a problem on some platform load_impl(const_cast(s.data()),MPI_CHAR,l); - } + } private: void load_impl(void * p, MPI_Datatype t, int l) - { + { BOOST_MPI_CHECK_RESULT(MPI_Unpack, (const_cast(boost::serialization::detail::get_data(buffer_)), buffer_.size(), &position, p, l, t, comm)); - } + } buffer_type & buffer_; mutable std::size_t size_; diff --git a/include/boost/mpi/detail/packed_oprimitive.hpp b/include/boost/mpi/detail/packed_oprimitive.hpp index 84af42e..84d06b5 100644 --- a/include/boost/mpi/detail/packed_oprimitive.hpp +++ b/include/boost/mpi/detail/packed_oprimitive.hpp @@ -77,12 +77,12 @@ public: save_impl(&t, get_mpi_datatype(t), 1); } - void save(const std::string &s) - { + void save(const std::string &s) + { unsigned int l = static_cast(s.size()); save(l); save_impl(s.data(),MPI_CHAR,s.size()); - } + } private: