From c40b51dacd37f532edaeef8ecd5fb3ef5ac5a386 Mon Sep 17 00:00:00 2001
From: Daniel Campora <dcampora@cern.ch>
Date: Wed, 23 Aug 2023 12:35:43 +0200
Subject: [PATCH] Add unaltered parameters to keep track of the config.

---
 stream/gear/include/TransformParameters.cuh |  2 +-
 stream/store/include/Store.cuh              | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/stream/gear/include/TransformParameters.cuh b/stream/gear/include/TransformParameters.cuh
index d7c24eca0ad..57a431e8e91 100644
--- a/stream/gear/include/TransformParameters.cuh
+++ b/stream/gear/include/TransformParameters.cuh
@@ -103,6 +103,6 @@ struct TransformParameters<const Allen::Store::StoreRef<T...>&> {
   {
     return TransformParametersImpl<
       Allen::Store::StoreRef<T...>,
-      typename Allen::Store::StoreRef<T...>::parameters_tuple_t>::transform(t, config);
+      typename Allen::Store::StoreRef<T...>::unaltered_parameters_tuple_t>::transform(t, config);
   }
 };
diff --git a/stream/store/include/Store.cuh b/stream/store/include/Store.cuh
index 75b0d0d1e08..47947ec497a 100644
--- a/stream/store/include/Store.cuh
+++ b/stream/store/include/Store.cuh
@@ -236,11 +236,13 @@ namespace Allen::Store {
    * @brief Manager of argument references for every handler.
    */
   template<
+    typename UnalteredParameterTuple,
     typename ParameterTuple,
     typename ParameterStruct,
     typename InputAggregatesTuple = std::tuple<>>
   struct StoreRef {
   public:
+    using unaltered_parameters_tuple_t = UnalteredParameterTuple;
     using parameters_tuple_t = ParameterTuple;
     using parameters_struct_t = ParameterStruct;
     using input_aggregates_t = typename AggregateTypes<InputAggregatesTuple>::aggregates_tuple_type_t;
@@ -372,6 +374,7 @@ namespace Allen::Store {
   struct WrappedTupleDetails<Tuple, std::index_sequence<>> {
     using parameters_tuple_t = std::tuple<>;
     using aggregates_tuple_t = std::tuple<>;
+    using unaltered_parameters_tuple_t = std::tuple<>;
   };
 
   template<typename Tuple, std::size_t I, std::size_t... Is>
@@ -386,6 +389,8 @@ namespace Allen::Store {
     using prev_parameters_tuple_t = typename prev_wrapped_tuple::parameters_tuple_t;
     using parameters_tuple_t = prepend_to_tuple_t<boost::pfr::tuple_element_t<I, Tuple>, prev_parameters_tuple_t>;
     using aggregates_tuple_t = typename prev_wrapped_tuple::aggregates_tuple_t;
+    using unaltered_parameters_tuple_t =
+      prepend_to_tuple_t<boost::pfr::tuple_element_t<I, Tuple>, typename prev_wrapped_tuple::unaltered_parameters_tuple_t>;
   };
 
   template<typename Tuple, std::size_t I, std::size_t... Is>
@@ -397,6 +402,8 @@ namespace Allen::Store {
     using parameters_tuple_t = typename prev_wrapped_tuple::parameters_tuple_t;
     using aggregates_tuple_t =
       prepend_to_tuple_t<boost::pfr::tuple_element_t<I, Tuple>, typename prev_wrapped_tuple::aggregates_tuple_t>;
+    using unaltered_parameters_tuple_t =
+      prepend_to_tuple_t<boost::pfr::tuple_element_t<I, Tuple>, typename prev_wrapped_tuple::unaltered_parameters_tuple_t>;
   };
 
   template<typename Tuple, std::size_t I, std::size_t... Is>
@@ -410,6 +417,8 @@ namespace Allen::Store {
     using prev_wrapped_tuple = WrappedTupleDetails<Tuple, std::index_sequence<Is...>>;
     using parameters_tuple_t = typename prev_wrapped_tuple::parameters_tuple_t;
     using aggregates_tuple_t = typename prev_wrapped_tuple::aggregates_tuple_t;
+    using unaltered_parameters_tuple_t =
+      prepend_to_tuple_t<boost::pfr::tuple_element_t<I, Tuple>, typename prev_wrapped_tuple::unaltered_parameters_tuple_t>;
   };
 
   template<size_t... Is>
@@ -426,6 +435,7 @@ namespace Allen::Store {
 
 template<typename T>
 using ArgumentReferences = Allen::Store::StoreRef<
+  typename Allen::Store::WrappedTuple<T>::unaltered_parameters_tuple_t,
   typename Allen::Store::WrappedTuple<T>::parameters_tuple_t,
   T,
   typename Allen::Store::WrappedTuple<T>::aggregates_tuple_t>;
-- 
GitLab