From 94f7493bb35cb6fb49f28d0541e1f61ded5527a6 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Wed, 31 Jul 2024 09:59:27 +0200
Subject: [PATCH] mv fcts flatten and reshapeTo2D from Vec to namespace
 FieldUtil in Field.h

---
 Base/Type/Field2D.h               | 23 +++++++++++++++++++++++
 Base/Util/Vec.h                   | 19 -------------------
 Sample/Interface/RoughnessMap.cpp |  9 ++++-----
 3 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/Base/Type/Field2D.h b/Base/Type/Field2D.h
index d92ed1e1ff6..fc73473b090 100644
--- a/Base/Type/Field2D.h
+++ b/Base/Type/Field2D.h
@@ -21,4 +21,27 @@
 using double2d_t = std::vector<std::vector<double>>;
 using complex2d_t = std::vector<std::vector<complex_t>>;
 
+namespace FieldUtil {
+
+template <typename C> std::vector<C> flatten(const std::vector<std::vector<C>>& src)
+{
+    std::vector<C> result;
+    for (const auto& row : src)
+        result.insert(result.end(), row.begin(), row.end());
+    return result;
+}
+
+template <typename C>
+std::vector<std::vector<C>> reshapeTo2D(const std::vector<C>& src, size_t n_rows)
+{
+    size_t n_cols = src.size() / n_rows;
+    std::vector<std::vector<C>> result(n_rows);
+
+    for (size_t i = 0; i < n_rows; i++)
+        result[i].insert(result[i].end(), src.begin() + i * n_cols, src.begin() + (i + 1) * n_cols);
+    return result;
+}
+
+} // namespace FieldUtil
+
 #endif // BORNAGAIN_BASE_TYPE_FIELD2D_H
diff --git a/Base/Util/Vec.h b/Base/Util/Vec.h
index 3c298004675..5b8e20dfcc1 100644
--- a/Base/Util/Vec.h
+++ b/Base/Util/Vec.h
@@ -40,25 +40,6 @@ template <typename C> void concat(std::vector<C>& v, const std::vector<C>& w)
     v.insert(v.end(), w.begin(), w.end());
 }
 
-template <typename C> std::vector<C> flatten(const std::vector<std::vector<C>>& src)
-{
-    std::vector<C> result;
-    for (const auto& row : src)
-        result.insert(result.end(), row.begin(), row.end());
-    return result;
-}
-
-template <typename C>
-std::vector<std::vector<C>> reshapeTo2D(const std::vector<C>& src, size_t n_rows)
-{
-    size_t n_cols = src.size() / n_rows;
-    std::vector<std::vector<C>> result(n_rows);
-
-    for (size_t i = 0; i < n_rows; i++)
-        result[i].insert(result[i].end(), src.begin() + i * n_cols, src.begin() + (i + 1) * n_cols);
-    return result;
-}
-
 } // namespace Vec
 
 #endif // BORNAGAIN_BASE_UTIL_VEC_H
diff --git a/Sample/Interface/RoughnessMap.cpp b/Sample/Interface/RoughnessMap.cpp
index ec672300b2f..ddad4ca7782 100644
--- a/Sample/Interface/RoughnessMap.cpp
+++ b/Sample/Interface/RoughnessMap.cpp
@@ -14,7 +14,6 @@
 
 #include "Sample/Interface/RoughnessMap.h"
 #include "Base/Util/Assert.h"
-#include "Base/Util/Vec.h"
 #include <algorithm>
 #include <numbers>
 
@@ -175,7 +174,7 @@ double2d_t RoughnessMap::applyHeightsToSpectrum(const double2d_t& h_map,
                                                 const double2d_t& s_map) const
 {
     // flatten spectral map
-    auto s_map_flat = Vec::flatten(s_map);
+    auto s_map_flat = FieldUtil::flatten(s_map);
 
     // sort and remember the original positions
     std::vector<std::pair<double, size_t>> s_map_indexed(s_map_flat.size());
@@ -185,13 +184,13 @@ double2d_t RoughnessMap::applyHeightsToSpectrum(const double2d_t& h_map,
     std::sort(s_map_indexed.begin(), s_map_indexed.end());
 
     // replace heights of spectral map
-    auto h_map_flat = Vec::flatten(h_map);
+    auto h_map_flat = FieldUtil::flatten(h_map);
     std::sort(h_map_flat.begin(), h_map_flat.end());
 
     for (size_t i = 0; i < s_map_flat.size(); i++)
         s_map_flat[s_map_indexed[i].second] = h_map_flat[i];
 
-    return Vec::reshapeTo2D(s_map_flat, s_map.size());
+    return FieldUtil::reshapeTo2D(s_map_flat, s_map.size());
 }
 
 void RoughnessMap::createMap()
@@ -229,7 +228,7 @@ PyObject* RoughnessMap::generate()
 {
     createMap();
     std::vector<std::size_t> dimensions = {m_rough_map.size(), m_rough_map[0].size()};
-    return PyInterpreter::Numpy::fromCppVector(dimensions, Vec::flatten(m_rough_map));
+    return PyInterpreter::Numpy::fromCppVector(dimensions, FieldUtil::flatten(m_rough_map));
 }
 
 #endif // BORNAGAIN_PYTHON
-- 
GitLab