From 88cd46aaec511360705df0fc7e577098877862d0 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Sun, 29 Oct 2023 10:01:53 +0100 Subject: [PATCH] Add broadcast for single std::string value --- src/utils/Messenger.hpp | 9 +++++++++ tests/test_Messenger.cpp | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp index 21e17abf2..ac79ee849 100644 --- a/src/utils/Messenger.hpp +++ b/src/utils/Messenger.hpp @@ -766,6 +766,15 @@ class Messenger CastArray cast_array = cast_value_to<CastType>::from(data); _broadcast_array(cast_array, root_rank); } + } else if constexpr (std::is_same_v<std::string, DataType>) { + Array s = convert_to_array(data); + broadcast(s, root_rank); + if (m_rank != root_rank) { + data.resize(s.size()); + for (size_t i = 0; i < s.size(); ++i) { + data[i] = s[i]; + } + } } else { static_assert(is_false_v<DataType>, "unexpected type of data"); } diff --git a/tests/test_Messenger.cpp b/tests/test_Messenger.cpp index 4f76e250d..4565614fb 100644 --- a/tests/test_Messenger.cpp +++ b/tests/test_Messenger.cpp @@ -223,6 +223,18 @@ TEST_CASE("Messenger", "[mpi]") parallel::broadcast(value, 0); REQUIRE((value == mpi_check::tri_int{6, 2, 4})); } + + { + std::string data; + if (parallel::rank() == 0) { + data = "foo"; + } else { + data = "bar"; + } + + parallel::broadcast(data, 0); + REQUIRE(data == "foo"); + } } SECTION("broadcast array") -- GitLab