From 4c804cb8144ed297d9dc2b064c3ec3b39f792787 Mon Sep 17 00:00:00 2001
From: Chris Jones <jonesc@hep.phy.cam.ac.uk>
Date: Wed, 20 Sep 2023 17:58:17 +0100
Subject: [PATCH] Fix write accessors for XYZ types

---
 Kernel/LHCbMath/include/LHCbMath/Geom/XYZ.h   | 32 ++++++++++++++-----
 .../RichFutureUtils/RichSIMDMirrorData.h      | 28 ++++++++++++----
 2 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/Kernel/LHCbMath/include/LHCbMath/Geom/XYZ.h b/Kernel/LHCbMath/include/LHCbMath/Geom/XYZ.h
index e3fd8a4d4fa..32b61b4d94f 100644
--- a/Kernel/LHCbMath/include/LHCbMath/Geom/XYZ.h
+++ b/Kernel/LHCbMath/include/LHCbMath/Geom/XYZ.h
@@ -50,22 +50,40 @@ namespace LHCb::Geom {
     XYZ( const AltXYZ& xyz ) : _X( xyz.X() ), _Y( xyz.Y() ), _Z( xyz.Z() ) {}
 
   public:
+    // read access
+
+    /// X coordinate
+    inline const TYPE& X() const noexcept { return _X; }
+    /// Y coordinate
+    inline const TYPE& Y() const noexcept { return _Y; }
+    /// Z coordinate
+    inline const TYPE& Z() const noexcept { return _Z; }
     /// X coordinate
-    inline TYPE X() const noexcept { return _X; }
+    inline const TYPE& x() const noexcept { return X(); }
     /// Y coordinate
-    inline TYPE Y() const noexcept { return _Y; }
+    inline const TYPE& y() const noexcept { return Y(); }
     /// Z coordinate
-    inline TYPE Z() const noexcept { return _Z; }
+    inline const TYPE& z() const noexcept { return Z(); }
 
   public:
+    // write access
+
     /// X coordinate
-    inline TYPE x() const noexcept { return X(); }
+    inline TYPE& X() noexcept { return _X; }
     /// Y coordinate
-    inline TYPE y() const noexcept { return Y(); }
+    inline TYPE& Y() noexcept { return _Y; }
     /// Z coordinate
-    inline TYPE z() const noexcept { return Z(); }
+    inline TYPE& Z() noexcept { return _Z; }
+    /// X coordinate
+    inline TYPE& x() noexcept { return X(); }
+    /// Y coordinate
+    inline TYPE& y() noexcept { return Y(); }
+    /// Z coordinate
+    inline TYPE& z() noexcept { return Z(); }
 
   public:
+    // setters
+
     /// Set X
     inline void SetX( const TYPE x ) noexcept { _X = x; }
     /// Set Y
@@ -78,8 +96,6 @@ namespace LHCb::Geom {
       SetY( y );
       SetZ( z );
     }
-
-  public:
     /// Set X
     inline void setX( const TYPE x ) noexcept { SetX( x ); }
     /// Set Y
diff --git a/Rich/RichFutureUtils/include/RichFutureUtils/RichSIMDMirrorData.h b/Rich/RichFutureUtils/include/RichFutureUtils/RichSIMDMirrorData.h
index 04110cbbe98..8ea68a03ee7 100644
--- a/Rich/RichFutureUtils/include/RichFutureUtils/RichSIMDMirrorData.h
+++ b/Rich/RichFutureUtils/include/RichFutureUtils/RichSIMDMirrorData.h
@@ -60,20 +60,36 @@ namespace Rich::SIMD {
       TYPE _X{}, _Y{}, _Z{};
 
     public:
+      // read access
+
+      /// X coordinate
+      [[nodiscard]] const TYPE& X() const noexcept { return _X; }
+      /// Y coordinate
+      [[nodiscard]] const TYPE& Y() const noexcept { return _Y; }
+      /// Z coordinate
+      [[nodiscard]] const TYPE& Z() const noexcept { return _Z; }
       /// X coordinate
-      [[nodiscard]] TYPE X() const noexcept { return _X; }
+      [[nodiscard]] const TYPE& x() const noexcept { return X(); }
       /// Y coordinate
-      [[nodiscard]] TYPE Y() const noexcept { return _Y; }
+      [[nodiscard]] const TYPE& y() const noexcept { return Y(); }
       /// Z coordinate
-      [[nodiscard]] TYPE Z() const noexcept { return _Z; }
+      [[nodiscard]] const TYPE& z() const noexcept { return Z(); }
 
     public:
+      // write access
+
+      /// X coordinate
+      [[nodiscard]] TYPE& X() noexcept { return _X; }
+      /// Y coordinate
+      [[nodiscard]] TYPE& Y() noexcept { return _Y; }
+      /// Z coordinate
+      [[nodiscard]] TYPE& Z() noexcept { return _Z; }
       /// X coordinate
-      [[nodiscard]] TYPE x() const noexcept { return X(); }
+      [[nodiscard]] TYPE& x() noexcept { return X(); }
       /// Y coordinate
-      [[nodiscard]] TYPE y() const noexcept { return Y(); }
+      [[nodiscard]] TYPE& y() noexcept { return Y(); }
       /// Z coordinate
-      [[nodiscard]] TYPE z() const noexcept { return Z(); }
+      [[nodiscard]] TYPE& z() noexcept { return Z(); }
 
     public:
       /// send to std::ostream
-- 
GitLab