From ee3b3f526c90f79061ddbf2401f73932878cee3c Mon Sep 17 00:00:00 2001
From: Gerhard Raven <gerhard.raven@nikhef.nl>
Date: Fri, 7 Mar 2025 16:06:37 +0100
Subject: [PATCH] replace range::v3 with std::ranges

---
 Det/DetDesc/CMakeLists.txt                 |  1 -
 Det/DetDesc/include/DetDesc/SolidBoolean.h | 12 +++++++-----
 Event/EventPacker/CMakeLists.txt           |  1 -
 Event/RecEvent/CMakeLists.txt              |  1 -
 Event/RecEvent/src/RecVertex_v2.cpp        |  1 -
 Event/TrackEvent/CMakeLists.txt            |  1 -
 Event/TrackEvent/include/Event/Track_v2.h  | 19 ++-----------------
 FT/FTDAQ/CMakeLists.txt                    |  1 -
 FT/FTDAQ/src/FTRawBankDecoder.cpp          | 12 ++++++------
 GaudiAlg/CMakeLists.txt                    |  3 +--
 10 files changed, 16 insertions(+), 36 deletions(-)

diff --git a/Det/DetDesc/CMakeLists.txt b/Det/DetDesc/CMakeLists.txt
index 9c23cece809..3307d468f0d 100644
--- a/Det/DetDesc/CMakeLists.txt
+++ b/Det/DetDesc/CMakeLists.txt
@@ -86,7 +86,6 @@ else()
             Gaudi::GaudiAlgLib
             Gaudi::GaudiUtilsLib
             LHCb::LHCbMathLib
-            Rangev3::rangev3
             ROOT::GenVector
             ROOT::MathCore
             VDT::vdt
diff --git a/Det/DetDesc/include/DetDesc/SolidBoolean.h b/Det/DetDesc/include/DetDesc/SolidBoolean.h
index a53b39bf391..e0b3fd84420 100644
--- a/Det/DetDesc/include/DetDesc/SolidBoolean.h
+++ b/Det/DetDesc/include/DetDesc/SolidBoolean.h
@@ -11,10 +11,8 @@
 #pragma once
 #include "DetDesc/SolidChild.h"
 #include "DetDesc/SolidTicks.h"
-#include "range/v3/view/const.hpp"
-#include "range/v3/view/indirect.hpp"
-#include "range/v3/view/span.hpp"
 #include <algorithm>
+#include <ranges>
 #include <string>
 #include <vector>
 
@@ -134,7 +132,9 @@ public:
   /** acess to range of const children
    *  @return "range"
    */
-  auto children() const { return ranges::span( m_sb_childrens ) | ranges::views::indirect | ranges::views::const_; }
+  auto children() const {
+    return std::ranges::transform_view( m_sb_childrens, []( auto const& i ) -> SolidChild const& { return *i; } );
+  }
 
   /** access to the childrens by index
    *  @param index index of child solid
@@ -180,7 +180,9 @@ protected:
   /** acess to range of children
    *  @return "range"
    */
-  auto children() { return ranges::span( m_sb_childrens ) | ranges::views::indirect; }
+  auto children() {
+    return std::ranges::transform_view( m_sb_childrens, []( auto& i ) -> SolidChild& { return *i; } );
+  }
 
   /** Calculate the maximum number of ticks that a straight line could
       make with this solid
diff --git a/Event/EventPacker/CMakeLists.txt b/Event/EventPacker/CMakeLists.txt
index 5dad30c1f2e..65275d6ebf1 100644
--- a/Event/EventPacker/CMakeLists.txt
+++ b/Event/EventPacker/CMakeLists.txt
@@ -48,7 +48,6 @@ gaudi_add_library(EventPackerLib
         src/lib/PackedDataBuffer.cpp
     LINK
         PUBLIC
-            Rangev3::rangev3
             Boost::headers
             Gaudi::GaudiAlgLib
             Gaudi::GaudiKernel
diff --git a/Event/RecEvent/CMakeLists.txt b/Event/RecEvent/CMakeLists.txt
index 7e978025cb1..f1a530c41cb 100644
--- a/Event/RecEvent/CMakeLists.txt
+++ b/Event/RecEvent/CMakeLists.txt
@@ -39,7 +39,6 @@ gaudi_add_library(RecEvent
             LHCb::LHCbMathLib
             LHCb::PartPropLib
             LHCb::TrackEvent
-            Rangev3::rangev3
 )
 
 gaudi_add_dictionary(RecEventDict
diff --git a/Event/RecEvent/src/RecVertex_v2.cpp b/Event/RecEvent/src/RecVertex_v2.cpp
index 779e25b90d8..877e5227137 100644
--- a/Event/RecEvent/src/RecVertex_v2.cpp
+++ b/Event/RecEvent/src/RecVertex_v2.cpp
@@ -12,7 +12,6 @@
 #include <algorithm>
 #include <cassert>
 #include <iostream>
-#include <range/v3/view.hpp>
 
 std::ostream& LHCb::Event::v2::RecVertex::fillStream( std::ostream& s ) const {
   s << "{ "
diff --git a/Event/TrackEvent/CMakeLists.txt b/Event/TrackEvent/CMakeLists.txt
index 31d2a923cf0..018dc250bd9 100644
--- a/Event/TrackEvent/CMakeLists.txt
+++ b/Event/TrackEvent/CMakeLists.txt
@@ -33,7 +33,6 @@ gaudi_add_library(TrackEvent
             LHCb::MuonDAQLib
             LHCb::LHCbKernel
             LHCb::LHCbMathLib
-            Rangev3::rangev3
 )
 
 gaudi_add_dictionary(TrackEventDict
diff --git a/Event/TrackEvent/include/Event/Track_v2.h b/Event/TrackEvent/include/Event/Track_v2.h
index 19302395643..fec42882f97 100644
--- a/Event/TrackEvent/include/Event/Track_v2.h
+++ b/Event/TrackEvent/include/Event/Track_v2.h
@@ -21,25 +21,10 @@
 #include "Kernel/meta_enum.h"
 #include "TrackEnums.h"
 #include <ostream>
+#include <ranges>
 #include <type_traits>
 #include <vector>
 
-#if __cplusplus >= 202002
-#  include <ranges>
-namespace LHCb::Event::v2::details {
-  template <typename Range>
-  using range_value_t = std::ranges::range_value_t<Range>;
-}
-#else
-#  include "range/v3/iterator/access.hpp"
-namespace LHCb::Event::v2::details {
-  // This is a manual expansion of ranges::range_value_t<Range> from range/v3/range/access.hpp
-  // added as workaround for https://github.com/root-project/root/issues/13032
-  // that makes range/v3/range/access.hpp impossible to include
-  template <typename Range>
-  using range_value_t = ranges::iter_value_t<decltype( begin( std::declval<Range&>() ) )>;
-} // namespace LHCb::Event::v2::details
-#endif
 /**
  *
  * Track v2 is the base class for offline and online tracks.
@@ -247,7 +232,7 @@ namespace LHCb::Event::v2 {
 
     /// Sets the list of LHCbIDs associated to this track
     template <typename Range, typename Tg,
-              typename = std::enable_if_t<std::is_convertible_v<LHCbID, details::range_value_t<Range>>>,
+              typename = std::enable_if_t<std::is_convertible_v<LHCbID, std::ranges::range_value_t<Range>>>,
               typename = std::enable_if_t<std::is_base_of_v<Tag::Unordered_tag, std::decay_t<Tg>>>>
     Track& setLhcbIDs( const Range& ids, Tg = Tag::Unordered ) {
       m_lhcbIDs.assign( ids.begin(), ids.end() );
diff --git a/FT/FTDAQ/CMakeLists.txt b/FT/FTDAQ/CMakeLists.txt
index f4c6622da17..6138c43ad80 100644
--- a/FT/FTDAQ/CMakeLists.txt
+++ b/FT/FTDAQ/CMakeLists.txt
@@ -43,7 +43,6 @@ gaudi_add_module(FTDAQ
         LHCb::FTDetLib
         LHCb::FTEvent
         LHCb::LHCbKernel
-        Rangev3::rangev3
 )
 
 gaudi_add_pytest(tests/pytest)
diff --git a/FT/FTDAQ/src/FTRawBankDecoder.cpp b/FT/FTDAQ/src/FTRawBankDecoder.cpp
index 4c89f85853c..9d39b5bc791 100644
--- a/FT/FTDAQ/src/FTRawBankDecoder.cpp
+++ b/FT/FTDAQ/src/FTRawBankDecoder.cpp
@@ -8,8 +8,6 @@
  * granted to it by virtue of its status as an Intergovernmental Organization  *
  * or submit itself to any jurisdiction.                                       *
 \*****************************************************************************/
-#include <range/v3/view/subrange.hpp>
-#include <range/v3/view/transform.hpp>
 
 #include "Gaudi/Accumulators/Histogram.h"
 #include <Gaudi/Property.h>
@@ -26,6 +24,7 @@
 
 #include <algorithm>
 #include <netinet/in.h>
+#include <ranges>
 
 #include "GaudiKernel/IDataProviderSvc.h"
 #include "Kernel/STLExtensions.h"
@@ -410,10 +409,11 @@ FTLiteClusters FTRawBankDecoder::decode_v456( const EventContext& evtCtx, LHCb::
     if ( !clusters.empty() && FTRawBank::isNullCluster( clusters.back() ) )
       clusters = clusters.first( clusters.size() - 1 ); // Remove padding at the end
     if constexpr ( vrsn == 4 ) {
-      auto r = clusters | ranges::views::transform( [&offset]( FTRawBank::FTClusterData c ) -> LHCb::FTLiteCluster {
-                 return { LHCb::Detector::FTChannelID{ offset + channelInBank( c ) }, FTRawBank::fracBit( c ),
-                          ( FTRawBank::sizeBit( c ) ? 0 : FTRawBank::maxClusterWidth ) };
-               } );
+      auto r =
+          clusters | std::ranges::views::transform( [&offset]( FTRawBank::FTClusterData c ) -> LHCb::FTLiteCluster {
+            return { LHCb::Detector::FTChannelID{ offset + channelInBank( c ) }, FTRawBank::fracBit( c ),
+                     ( FTRawBank::sizeBit( c ) ? 0 : FTRawBank::maxClusterWidth ) };
+          } );
       clus.insert( r.begin(), r.end(), offset.globalQuarterIdx() );
     }
     if constexpr ( vrsn == 5 || vrsn == 6 ) {
diff --git a/GaudiAlg/CMakeLists.txt b/GaudiAlg/CMakeLists.txt
index ab584fc9265..f6d06f45973 100644
--- a/GaudiAlg/CMakeLists.txt
+++ b/GaudiAlg/CMakeLists.txt
@@ -33,8 +33,7 @@ gaudi_add_library(GaudiAlgLib
                       Gaudi::GaudiPythonLib
                       Gaudi::Functional
                       Boost::headers
-                      Boost::regex
-                      Rangev3::rangev3)
+                      Boost::regex)
 if(GAUDI_USE_AIDA)
    target_sources(GaudiAlgLib PRIVATE src/lib/Fill.cpp
                                       src/lib/Print.cpp
-- 
GitLab