From 0f6686935fb4536027d9db3a35322b6b8e29cb88 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Sat, 2 Oct 2021 18:27:05 +0200
Subject: [PATCH] Add copy_to to CastArray (fixes sequential build)

---
 src/utils/CastArray.hpp | 12 ++++++++++++
 src/utils/Messenger.hpp | 12 ++++++------
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/utils/CastArray.hpp b/src/utils/CastArray.hpp
index d329b4ef3..71bfc246f 100644
--- a/src/utils/CastArray.hpp
+++ b/src/utils/CastArray.hpp
@@ -32,6 +32,18 @@ class [[nodiscard]] CastArray
     return m_values[i];
   }
 
+  template <typename ImageDataType, typename ImageCastDataType>
+  friend PUGS_INLINE void copy_to(const CastArray& source_array,
+                                  CastArray<ImageDataType, ImageCastDataType>& image_array)
+  {
+    static_assert(std::is_same_v<std::remove_const_t<CastDataType>, ImageCastDataType>);
+    static_assert(not std::is_const_v<ImageCastDataType>);
+
+    Assert(source_array.size() == image_array.size());
+
+    std::copy(source_array.m_values, source_array.m_values + source_array.size(), &image_array[0]);
+  }
+
   PUGS_INLINE
   CastArray& operator=(const CastArray&) = default;
 
diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp
index 69b144224..75ef1732a 100644
--- a/src/utils/Messenger.hpp
+++ b/src/utils/Messenger.hpp
@@ -135,7 +135,7 @@ class Messenger
     MPI_Gather(data_address, data_array.size(), mpi_datatype, gather_address, data_array.size(), mpi_datatype, rank,
                MPI_COMM_WORLD);
 #else    // PUGS_HAS_MPI
-    value_copy(data_array, gather_array);
+    copy_to(data_array, gather_array);
 #endif   // PUGS_HAS_MPI
   }
 
@@ -176,7 +176,7 @@ class Messenger
     MPI_Gatherv(data_address, data_array.size(), mpi_datatype, gather_address, sizes_address, positions_address,
                 mpi_datatype, rank, MPI_COMM_WORLD);
 #else    // PUGS_HAS_MPI
-    value_copy(data_array, gather_array);
+    copy_to(data_array, gather_array);
 #endif   // PUGS_HAS_MPI
   }
 
@@ -221,7 +221,7 @@ class Messenger
     MPI_Allgather(data_address, data_array.size(), mpi_datatype, gather_address, data_array.size(), mpi_datatype,
                   MPI_COMM_WORLD);
 #else    // PUGS_HAS_MPI
-    value_copy(data_array, gather_array);
+    copy_to(data_array, gather_array);
 #endif   // PUGS_HAS_MPI
   }
 
@@ -261,7 +261,7 @@ class Messenger
     MPI_Allgatherv(data_address, data_array.size(), mpi_datatype, gather_address, sizes_address, positions_address,
                    mpi_datatype, MPI_COMM_WORLD);
 #else    // PUGS_HAS_MPI
-    value_copy(data_array, gather_array);
+    copy_to(data_array, gather_array);
 #endif   // PUGS_HAS_MPI
   }
 
@@ -322,7 +322,7 @@ class Messenger
 
     MPI_Alltoall(sent_address, count, mpi_datatype, recv_address, count, mpi_datatype, MPI_COMM_WORLD);
 #else    // PUGS_HAS_MPI
-    value_copy(sent_array, recv_array);
+    copy_to(sent_array, recv_array);
 #endif   // PUGS_HAS_MPI
   }
 
@@ -377,7 +377,7 @@ class Messenger
     Assert(sent_array_list.size() == 1);
     Assert(recv_array_list.size() == 1);
 
-    value_copy(sent_array_list[0], recv_array_list[0]);
+    copy_to(sent_array_list[0], recv_array_list[0]);
 #endif   // PUGS_HAS_MPI
   }
 
-- 
GitLab