From df364c16fa065983c8df8f73985fa2d63b9efc61 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 16 Feb 2024 11:00:24 +0100
Subject: [PATCH] Frame members const; rm Frame::setScale

---
 Base/Axis/Frame.cpp       | 22 ++++++++++++++--------
 Base/Axis/Frame.h         |  5 ++---
 Base/Axis/FrameUtil.cpp   | 10 ----------
 Base/Axis/FrameUtil.h     |  3 ---
 Device/Data/Datafield.cpp |  3 +--
 5 files changed, 17 insertions(+), 26 deletions(-)

diff --git a/Base/Axis/Frame.cpp b/Base/Axis/Frame.cpp
index f025deee99b..7cc24dcfd1d 100644
--- a/Base/Axis/Frame.cpp
+++ b/Base/Axis/Frame.cpp
@@ -13,14 +13,26 @@
 //  ************************************************************************************************
 
 #include "Base/Axis/Frame.h"
-#include "Base/Axis/FrameUtil.h"
 #include "Base/Axis/Scale.h"
 #include "Base/Util/Assert.h"
 #include "Base/Util/StringUtil.h"
 
+namespace {
+
+size_t product_size(const std::vector<const Scale*>& axes)
+{
+    size_t result = 1;
+    for (const Scale* ax : axes)
+        result *= ax->size();
+    return result;
+}
+
+} // namespace
+
+
 Frame::Frame(const std::vector<const Scale*>& axes)
     : m_axes(axes)
-    , m_size(FrameUtil::product_size(m_axes.shared()))
+    , m_size(::product_size(axes))
 {
 }
 
@@ -139,9 +151,3 @@ Frame* Frame::flat() const
             outaxes.emplace_back(s->clone());
     return new Frame(std::move(outaxes));
 }
-
-void Frame::setScale(size_t k_axis, Scale* scale)
-{
-    m_axes.replace_at(k_axis, scale);
-    m_size = FrameUtil::product_size(m_axes.shared());
-}
diff --git a/Base/Axis/Frame.h b/Base/Axis/Frame.h
index d9c60bdfddb..cc041753a5a 100644
--- a/Base/Axis/Frame.h
+++ b/Base/Axis/Frame.h
@@ -76,12 +76,11 @@ public:
     Frame* flat() const;
 
 #ifndef SWIG
-    void setScale(size_t k_axis, Scale* scale);
     std::vector<const Scale*> clonedAxes() const;
 
 private:
-    CloneableVector<const Scale> m_axes;
-    size_t m_size; // cached product of axis sizes
+    const CloneableVector<const Scale> m_axes;
+    const size_t m_size; // cached product of axis sizes
 
 #endif // SWIG
 };
diff --git a/Base/Axis/FrameUtil.cpp b/Base/Axis/FrameUtil.cpp
index ecb35ab6835..6f3a9e50bb1 100644
--- a/Base/Axis/FrameUtil.cpp
+++ b/Base/Axis/FrameUtil.cpp
@@ -16,16 +16,6 @@
 #include "Base/Axis/Frame.h"
 #include "Base/Axis/Scale.h"
 
-size_t FrameUtil::product_size(const std::vector<const Scale*>& axes)
-{
-    if (axes.empty())
-        return 1;
-    size_t result = 1;
-    for (const Scale* ax : axes)
-        result *= ax->size();
-    return result;
-}
-
 // For axis EquiDivision("axis", 8, -5.0, 3.0) the coordinate x=-4.5 (center of bin #0) will
 // be converted into 0.5 (which is a bin center expressed in bin fraction coordinates).
 // The coordinate -5.0 (outside of axis definition) will be converted to -0.5
diff --git a/Base/Axis/FrameUtil.h b/Base/Axis/FrameUtil.h
index 76a35ba424a..3f2b27e9f11 100644
--- a/Base/Axis/FrameUtil.h
+++ b/Base/Axis/FrameUtil.h
@@ -23,9 +23,6 @@ class Scale;
 
 namespace FrameUtil {
 
-//! Product of axis sizes.
-size_t product_size(const std::vector<const Scale*>& axes);
-
 //! Transforms coordinate on axis into the bin-fraction-coordinate.
 double coordinateToBinf(double coordinate, const Scale& axis);
 
diff --git a/Device/Data/Datafield.cpp b/Device/Data/Datafield.cpp
index 806d84df6e0..404883c17e8 100644
--- a/Device/Data/Datafield.cpp
+++ b/Device/Data/Datafield.cpp
@@ -310,8 +310,7 @@ Datafield* Datafield::crop(double xmin, double xmax) const
                 errout.push_back(m_err_sigmas[i]);
         }
     }
-    Frame* outframe = frame().clone();
-    outframe->setScale(0, xclipped);
+    Frame* outframe = new Frame(xclipped);
     ASSERT(outframe->xAxis().size() == out.size());
     return new Datafield(outframe, out, errout);
 }
-- 
GitLab