From f6a7fe41fb53e357f7bcf20c31c5bf4e7f553dec Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Wed, 22 Jan 2025 13:33:10 +0100 Subject: [PATCH 01/10] remove obsolete concept --- Framework/Core/include/Framework/ASoA.h | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index 8af872a64176d..80b746c96b82c 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -806,9 +806,6 @@ concept is_dynamic_column = requires(C& c) { template concept is_marker_column = requires { &C::mark; }; -template -using is_dynamic_t = std::conditional_t, std::true_type, std::false_type>; - template concept is_column = is_persistent_column || is_dynamic_column || is_indexing_column || is_marker_column; @@ -1838,20 +1835,17 @@ class Table } } - template + template auto getDynamicColumn() const { - using decayed = std::decay_t; - static_assert(is_dynamic_t(), "Requested column is not a dynamic column"); - return static_cast(*this).template getDynamicValue(); + return static_cast>(*this).template getDynamicValue(); } template + requires(is_dynamic_column || is_persistent_column) auto getValue() const { - using COL = std::decay_t; - static_assert(is_dynamic_t() || soa::is_persistent_column, "Should be persistent or dynamic column with no argument that has a return type convertable to float"); - return static_cast(static_cast(*this).get()); + return static_cast(static_cast>(*this).get()); } template From 7218b61947013de87423025abb12051fe8772f56 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 13:05:41 +0100 Subject: [PATCH 02/10] DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/ASoA.h | 61 +++++++++++-------- .../Core/include/Framework/Configurable.h | 5 +- .../include/Framework/GroupedCombinations.h | 19 +++++- 3 files changed, 54 insertions(+), 31 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index 80b746c96b82c..cecb27af058c6 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -208,8 +208,6 @@ template struct TableMetadata { using columns = framework::pack; using persistent_columns_t = framework::selected_pack; - using external_index_columns_t = framework::selected_pack; - using internal_index_columns_t = framework::selected_pack; template static consteval std::array getMap(framework::pack) @@ -1028,6 +1026,13 @@ concept can_bind = requires(T&& t) { template concept has_index = (is_indexing_column || ...); +template + requires (!is_self_index_column) +auto getBinding() -> typename C::binding_t {} + +template +auto getBinding() -> void {} + template struct TableIterator : IP, C... { public: @@ -1035,9 +1040,9 @@ struct TableIterator : IP, C... { using policy_t = IP; using all_columns = framework::pack; using persistent_columns_t = framework::selected_pack; - using external_index_columns_t = framework::selected_pack; - using internal_index_columns_t = framework::selected_pack; - using bindings_pack_t = decltype([](framework::pack) -> framework::pack {}(external_index_columns_t{})); // decltype(extractBindings(external_index_columns_t{})); + using bindings_pack_t = decltype([](framework::pack) { + return framework::pack())...>{}; + }(all_columns{})); TableIterator(arrow::ChunkedArray* columnData[sizeof...(C)], IP&& policy) : IP{policy}, @@ -1130,7 +1135,7 @@ struct TableIterator : IP, C... { template void doSetCurrentIndex(framework::pack, TA* current) { - (CL::setCurrent(current), ...); + ([¤t, this](){ if constexpr (is_index_column && !is_self_index_column) {CL::setCurrent(current);} }(), ...); } template @@ -1142,24 +1147,30 @@ struct TableIterator : IP, C... { template auto getIndexBindingsImpl(framework::pack) const { - return std::vector{static_cast(*this).getCurrentRaw()...}; + std::vector result; + ([this, &result](){ + if constexpr (is_index_column && !is_self_index_column) { + result.emplace_back(static_cast(*this).getCurrentRaw()); + } + }(), ...); + return result; } auto getIndexBindings() const { - return getIndexBindingsImpl(external_index_columns_t{}); + return getIndexBindingsImpl(all_columns{}); } template void bindExternalIndices(TA*... current) { - (doSetCurrentIndex(external_index_columns_t{}, current), ...); + (doSetCurrentIndex(all_columns{}, current), ...); } template void doSetCurrentIndexRaw(framework::pack p, std::vector&& ptrs) { - (Cs::setCurrentRaw(ptrs[framework::has_type_at_v(p)]), ...); + ([&ptrs, p, this](){ if constexpr (is_index_column && !is_self_index_column) { Cs::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); } }(), ...); } template @@ -1167,18 +1178,18 @@ struct TableIterator : IP, C... { { o2::soa::Binding b; b.bind(ptr); - (Cs::setCurrentRaw(b), ...); + ([&ptr, &b, this](){ if constexpr (is_self_index_column) { Cs::setCurrentRaw(b); } }(), ...); } void bindExternalIndicesRaw(std::vector&& ptrs) { - doSetCurrentIndexRaw(external_index_columns_t{}, std::forward>(ptrs)); + doSetCurrentIndexRaw(all_columns{}, std::forward>(ptrs)); } template void bindInternalIndices(I const* table) { - doSetCurrentInternal(internal_index_columns_t{}, table); + doSetCurrentInternal(all_columns{}, table); } private: @@ -1362,25 +1373,25 @@ static constexpr std::string getLabelFromTypeForKey(std::string const& key) template consteval static bool hasIndexTo(framework::pack&&) { - return (o2::soa::is_binding_compatible_v() || ...); + return ([](){ if constexpr (is_index_column && !is_self_index_column) { return o2::soa::is_binding_compatible_v(); } else { return false; } }() || ...); } template consteval static bool hasSortedIndexTo(framework::pack&&) { - return ((C::sorted && o2::soa::is_binding_compatible_v()) || ...); + return ([](){if constexpr (is_index_column && !is_self_index_column) { return (C::sorted && o2::soa::is_binding_compatible_v()); } else { return false; }}() || ...); } template consteval static bool relatedByIndex() { - return hasIndexTo(typename Z::table_t::external_index_columns_t{}); + return hasIndexTo(typename Z::table_t::columns_t{}); } template consteval static bool relatedBySortedIndex() { - return hasSortedIndexTo(typename Z::table_t::external_index_columns_t{}); + return hasSortedIndexTo(typename Z::table_t::columns_t{}); } } // namespace o2::soa @@ -1723,16 +1734,13 @@ class Table using persistent_columns_t = decltype([](framework::pack&&) -> framework::selected_pack {}(columns_t{})); using column_types = decltype([](framework::pack) -> framework::pack {}(persistent_columns_t{})); - using external_index_columns_t = decltype([](framework::pack&&) -> framework::selected_pack {}(columns_t{})); - using internal_index_columns_t = decltype([](framework::pack&&) -> framework::selected_pack {}(columns_t{})); template using base_iterator = decltype(base_iter(columns_t{})); template struct TableIteratorBase : base_iterator { using columns_t = typename Parent::columns_t; - using external_index_columns_t = typename Parent::external_index_columns_t; - using bindings_pack_t = decltype([](framework::pack) -> framework::pack {}(external_index_columns_t{})); + using bindings_pack_t = typename base_iterator::bindings_pack_t; // static constexpr const std::array originals{T::ref...}; static constexpr auto originals = Parent::originals; using policy_t = IP; @@ -1825,7 +1833,7 @@ class Table using decayed = std::decay_t; if constexpr (framework::has_type(bindings_pack_t{})) { // index to another table constexpr auto idx = framework::has_type_at_v(bindings_pack_t{}); - return framework::pack_element_t::getId(); + return framework::pack_element_t::getId(); } else if constexpr (std::same_as) { // self index return this->globalIndex(); } else if constexpr (is_indexing_column) { // soa::Index<> @@ -2050,13 +2058,13 @@ class Table void bindInternalIndicesExplicit(o2::soa::Binding binding) { - doBindInternalIndicesExplicit(internal_index_columns_t{}, binding); + doBindInternalIndicesExplicit(columns_t{}, binding); } template void doBindInternalIndicesExplicit(framework::pack, o2::soa::Binding binding) { - (static_cast(mBegin).setCurrentRaw(binding), ...); + ([this, &binding](){ if constexpr (is_self_index_column) { static_cast(mBegin).setCurrentRaw(binding); } }(), ...); } void bindExternalIndicesRaw(std::vector&& ptrs) @@ -2073,7 +2081,7 @@ class Table template void copyIndexBindings(T& dest) const { - doCopyIndexBindings(external_index_columns_t{}, dest); + doCopyIndexBindings(columns_t{}, dest); } auto select(framework::expressions::Filter const& f) const @@ -3292,7 +3300,6 @@ class FilteredBase : public T using T::originals; using columns_t = typename T::columns_t; using persistent_columns_t = typename T::persistent_columns_t; - using external_index_columns_t = typename T::external_index_columns_t; using iterator = T::template iterator_template_o; using unfiltered_iterator = T::template iterator_template_o; @@ -3438,7 +3445,7 @@ class FilteredBase : public T template void copyIndexBindings(T1& dest) const { - doCopyIndexBindings(external_index_columns_t{}, dest); + doCopyIndexBindings(columns_t{}, dest); } template diff --git a/Framework/Core/include/Framework/Configurable.h b/Framework/Core/include/Framework/Configurable.h index 88e50cf3c7c26..930c37e700105 100644 --- a/Framework/Core/include/Framework/Configurable.h +++ b/Framework/Core/include/Framework/Configurable.h @@ -83,6 +83,9 @@ struct Configurable : IP { template using MutableConfigurable = Configurable>; +template +concept is_configurable = requires(T& t) { &T::operator typename T::type; }; + using ConfigurableAxis = Configurable, ConfigParamKind::kAxisSpec, ConfigurablePolicyConst, ConfigParamKind::kAxisSpec>>; template @@ -97,7 +100,7 @@ struct ProcessConfigurable : Configurable { }; template -concept is_process_configurable = base_of_template; +concept is_process_configurable = is_configurable && requires(T& t) { t.process; }; #define PROCESS_SWITCH(_Class_, _Name_, _Help_, _Default_) \ decltype(ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_}) do##_Name_ = ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_}; diff --git a/Framework/Core/include/Framework/GroupedCombinations.h b/Framework/Core/include/Framework/GroupedCombinations.h index 21d8384e3aa6e..0508efce367c7 100644 --- a/Framework/Core/include/Framework/GroupedCombinations.h +++ b/Framework/Core/include/Framework/GroupedCombinations.h @@ -34,14 +34,27 @@ auto interleaveTuples(std::tuple& t1, std::tuple& t2) return interleaveTuplesImpl(t1, t2, std::index_sequence_for()); } +template + requires(!soa::is_self_index_column) +auto isIndexTo() +{ + if constexpr (o2::soa::is_binding_compatible_v()) { + return std::true_type{}; + } else { + return std::false_type{}; + } +} + +template +auto isIndexTo() ->std::false_type {} + template -using is_index_to_g_t = typename std::conditional(), std::true_type, std::false_type>::type; +using is_index_to_g_t = decltype(isIndexTo()); template expressions::BindingNode getMatchingIndexNode() { - using external_index_columns_pack = typename A::external_index_columns_t; - using selected_indices_t = selected_pack_multicondition, external_index_columns_pack>; + using selected_indices_t = selected_pack_multicondition, typename A::columns_t>; static_assert(pack_size(selected_indices_t{}) == 1, "No matching index column from associated to grouping"); using index_column_t = pack_head_t; return expressions::BindingNode{index_column_t::mLabel, o2::framework::TypeIdHelpers::uniqueId(), expressions::selectArrowType()}; From d2aceb2e8d04ee4b164e73b1aff1e98cd9ea00d9 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 13:11:01 +0100 Subject: [PATCH 03/10] fixup! DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/ASoA.h | 27 +++++++++++-------- .../include/Framework/GroupedCombinations.h | 4 ++- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index cecb27af058c6..d3d35265eeeba 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -1027,11 +1027,15 @@ template concept has_index = (is_indexing_column || ...); template - requires (!is_self_index_column) -auto getBinding() -> typename C::binding_t {} + requires(!is_self_index_column) +auto getBinding() -> typename C::binding_t +{ +} template -auto getBinding() -> void {} +auto getBinding() -> void +{ +} template struct TableIterator : IP, C... { @@ -1135,7 +1139,7 @@ struct TableIterator : IP, C... { template void doSetCurrentIndex(framework::pack, TA* current) { - ([¤t, this](){ if constexpr (is_index_column && !is_self_index_column) {CL::setCurrent(current);} }(), ...); + ([¤t, this]() { if constexpr (is_index_column && !is_self_index_column) {CL::setCurrent(current);} }(), ...); } template @@ -1148,11 +1152,12 @@ struct TableIterator : IP, C... { auto getIndexBindingsImpl(framework::pack) const { std::vector result; - ([this, &result](){ + ([this, &result]() { if constexpr (is_index_column && !is_self_index_column) { result.emplace_back(static_cast(*this).getCurrentRaw()); } - }(), ...); + }(), + ...); return result; } @@ -1170,7 +1175,7 @@ struct TableIterator : IP, C... { template void doSetCurrentIndexRaw(framework::pack p, std::vector&& ptrs) { - ([&ptrs, p, this](){ if constexpr (is_index_column && !is_self_index_column) { Cs::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); } }(), ...); + ([&ptrs, p, this]() { if constexpr (is_index_column && !is_self_index_column) { Cs::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); } }(), ...); } template @@ -1178,7 +1183,7 @@ struct TableIterator : IP, C... { { o2::soa::Binding b; b.bind(ptr); - ([&ptr, &b, this](){ if constexpr (is_self_index_column) { Cs::setCurrentRaw(b); } }(), ...); + ([&ptr, &b, this]() { if constexpr (is_self_index_column) { Cs::setCurrentRaw(b); } }(), ...); } void bindExternalIndicesRaw(std::vector&& ptrs) @@ -1373,13 +1378,13 @@ static constexpr std::string getLabelFromTypeForKey(std::string const& key) template consteval static bool hasIndexTo(framework::pack&&) { - return ([](){ if constexpr (is_index_column && !is_self_index_column) { return o2::soa::is_binding_compatible_v(); } else { return false; } }() || ...); + return ([]() { if constexpr (is_index_column && !is_self_index_column) { return o2::soa::is_binding_compatible_v(); } else { return false; } }() || ...); } template consteval static bool hasSortedIndexTo(framework::pack&&) { - return ([](){if constexpr (is_index_column && !is_self_index_column) { return (C::sorted && o2::soa::is_binding_compatible_v()); } else { return false; }}() || ...); + return ([]() {if constexpr (is_index_column && !is_self_index_column) { return (C::sorted && o2::soa::is_binding_compatible_v()); } else { return false; } }() || ...); } template @@ -2064,7 +2069,7 @@ class Table template void doBindInternalIndicesExplicit(framework::pack, o2::soa::Binding binding) { - ([this, &binding](){ if constexpr (is_self_index_column) { static_cast(mBegin).setCurrentRaw(binding); } }(), ...); + ([this, &binding]() { if constexpr (is_self_index_column) { static_cast(mBegin).setCurrentRaw(binding); } }(), ...); } void bindExternalIndicesRaw(std::vector&& ptrs) diff --git a/Framework/Core/include/Framework/GroupedCombinations.h b/Framework/Core/include/Framework/GroupedCombinations.h index 0508efce367c7..526809363f7fc 100644 --- a/Framework/Core/include/Framework/GroupedCombinations.h +++ b/Framework/Core/include/Framework/GroupedCombinations.h @@ -46,7 +46,9 @@ auto isIndexTo() } template -auto isIndexTo() ->std::false_type {} +auto isIndexTo() -> std::false_type +{ +} template using is_index_to_g_t = decltype(isIndexTo()); From 33013b633fe7f32fcda5825818625a2b9cc02e6c Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 13:35:39 +0100 Subject: [PATCH 04/10] fixup! DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/GroupedCombinations.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Framework/Core/include/Framework/GroupedCombinations.h b/Framework/Core/include/Framework/GroupedCombinations.h index 526809363f7fc..38b9f34e25bff 100644 --- a/Framework/Core/include/Framework/GroupedCombinations.h +++ b/Framework/Core/include/Framework/GroupedCombinations.h @@ -46,8 +46,9 @@ auto isIndexTo() } template -auto isIndexTo() -> std::false_type +auto isIndexTo() { + return std::false_type{}; } template From ed20c5f3ca410253f9c8e9acbe4e155e26e3cba8 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 13:36:14 +0100 Subject: [PATCH 05/10] fixup! DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/GroupedCombinations.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Framework/Core/include/Framework/GroupedCombinations.h b/Framework/Core/include/Framework/GroupedCombinations.h index 38b9f34e25bff..790667d2468c9 100644 --- a/Framework/Core/include/Framework/GroupedCombinations.h +++ b/Framework/Core/include/Framework/GroupedCombinations.h @@ -36,7 +36,7 @@ auto interleaveTuples(std::tuple& t1, std::tuple& t2) template requires(!soa::is_self_index_column) -auto isIndexTo() +constexpr auto isIndexTo() { if constexpr (o2::soa::is_binding_compatible_v()) { return std::true_type{}; @@ -46,7 +46,7 @@ auto isIndexTo() } template -auto isIndexTo() +constexpr auto isIndexTo() { return std::false_type{}; } From d0618eef2159a569256ef63d2e5f52aa4ca3d39b Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 14:24:11 +0100 Subject: [PATCH 06/10] fixup! DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/ASoA.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index d3d35265eeeba..f8ca7ed1c81e7 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -1028,12 +1028,12 @@ concept has_index = (is_indexing_column || ...); template requires(!is_self_index_column) -auto getBinding() -> typename C::binding_t +constexpr auto getBinding() -> typename C::binding_t { } template -auto getBinding() -> void +constexpr auto getBinding() -> void { } From 439f56ea16ad200b3b1d7de33bd8127025a0e2db Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 14:26:12 +0100 Subject: [PATCH 07/10] fixup! DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/ASoA.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index f8ca7ed1c81e7..3f2f1a5383e03 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -1028,12 +1028,12 @@ concept has_index = (is_indexing_column || ...); template requires(!is_self_index_column) -constexpr auto getBinding() -> typename C::binding_t +consteval auto getBinding() -> typename C::binding_t { } template -constexpr auto getBinding() -> void +consteval auto getBinding() -> void { } From 3db6aa7eb74b6371fcaf6aa78b456e5ca5d6aecf Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Thu, 23 Jan 2025 14:30:07 +0100 Subject: [PATCH 08/10] fixup! DPL Analysis: remove unnecessary instances of selected_pack --- Framework/Core/include/Framework/GroupedCombinations.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Framework/Core/include/Framework/GroupedCombinations.h b/Framework/Core/include/Framework/GroupedCombinations.h index 790667d2468c9..9f450489ac50f 100644 --- a/Framework/Core/include/Framework/GroupedCombinations.h +++ b/Framework/Core/include/Framework/GroupedCombinations.h @@ -36,7 +36,7 @@ auto interleaveTuples(std::tuple& t1, std::tuple& t2) template requires(!soa::is_self_index_column) -constexpr auto isIndexTo() +consteval auto isIndexTo() { if constexpr (o2::soa::is_binding_compatible_v()) { return std::true_type{}; @@ -46,7 +46,7 @@ constexpr auto isIndexTo() } template -constexpr auto isIndexTo() +consteval auto isIndexTo() { return std::false_type{}; } From e6f8ced7817842f59e6f791e5f5e95943de32602 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Fri, 24 Jan 2025 11:11:01 +0100 Subject: [PATCH 09/10] use requirements instead of if-constexpr --- Framework/Core/include/Framework/ASoA.h | 42 ++++++++++++++++++------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index 3f2f1a5383e03..a364c31f2d34b 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -1139,7 +1139,10 @@ struct TableIterator : IP, C... { template void doSetCurrentIndex(framework::pack, TA* current) { - ([¤t, this]() { if constexpr (is_index_column && !is_self_index_column) {CL::setCurrent(current);} }(), ...); + (framework::overloaded{ + [¤t, this] requires(!is_self_index_column) () { CI::setCurrent(current); }, + [](){} + }.template operator()(), ...); } template @@ -1152,12 +1155,12 @@ struct TableIterator : IP, C... { auto getIndexBindingsImpl(framework::pack) const { std::vector result; - ([this, &result]() { - if constexpr (is_index_column && !is_self_index_column) { - result.emplace_back(static_cast(*this).getCurrentRaw()); - } - }(), - ...); + (framework::overloaded{ + [this, &result] requires(!is_self_index_column) () mutable { + result.emplace_back(CI::getCurrentRaw()); + }, + [](){} + }.template operator()(), ...); return result; } @@ -1175,7 +1178,10 @@ struct TableIterator : IP, C... { template void doSetCurrentIndexRaw(framework::pack p, std::vector&& ptrs) { - ([&ptrs, p, this]() { if constexpr (is_index_column && !is_self_index_column) { Cs::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); } }(), ...); + (framework::overloaded{ + [&ptrs, p, this] requires(!is_self_index_column) () { CI::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); }, + [](){} + }.template operator()(), ...); } template @@ -1183,7 +1189,10 @@ struct TableIterator : IP, C... { { o2::soa::Binding b; b.bind(ptr); - ([&ptr, &b, this]() { if constexpr (is_self_index_column) { Cs::setCurrentRaw(b); } }(), ...); + (framework::overloaded{ + [&ptr, &b, this]() { CI::setCurrentRaw(b); }, + [](){} + }.template operator()(), ...); } void bindExternalIndicesRaw(std::vector&& ptrs) @@ -1378,13 +1387,19 @@ static constexpr std::string getLabelFromTypeForKey(std::string const& key) template consteval static bool hasIndexTo(framework::pack&&) { - return ([]() { if constexpr (is_index_column && !is_self_index_column) { return o2::soa::is_binding_compatible_v(); } else { return false; } }() || ...); + return (framework::overloaded{ + [] requires(!is_self_index_column) () { return o2::soa::is_binding_compatible_v(); }, + [](){ return false; } + }.template operator()() || ...); } template consteval static bool hasSortedIndexTo(framework::pack&&) { - return ([]() {if constexpr (is_index_column && !is_self_index_column) { return (C::sorted && o2::soa::is_binding_compatible_v()); } else { return false; } }() || ...); + return (framework::overloaded{ + [] requires(!is_self_index_column) () {return (CI::sorted && o2::soa::is_binding_compatible_v()); }, + [](){} + }.template operator()() || ...); } template @@ -2069,7 +2084,10 @@ class Table template void doBindInternalIndicesExplicit(framework::pack, o2::soa::Binding binding) { - ([this, &binding]() { if constexpr (is_self_index_column) { static_cast(mBegin).setCurrentRaw(binding); } }(), ...); + (framework::overloaded{ + [this, &binding]() { static_cast(mBegin).setCurrentRaw(binding); }, + [](){} + }.template operator()(), ...); } void bindExternalIndicesRaw(std::vector&& ptrs) From eca9f739cb024e7b67a69f14fb236e2e6296f2c3 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Fri, 24 Jan 2025 11:13:17 +0100 Subject: [PATCH 10/10] fixup! use requirements instead of if-constexpr --- Framework/Core/include/Framework/ASoA.h | 63 ++++++++++++++++--------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index a364c31f2d34b..8ef7ed9539ec7 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -1140,9 +1140,12 @@ struct TableIterator : IP, C... { void doSetCurrentIndex(framework::pack, TA* current) { (framework::overloaded{ - [¤t, this] requires(!is_self_index_column) () { CI::setCurrent(current); }, - [](){} - }.template operator()(), ...); + [¤t, this] + requires(!is_self_index_column) + () { CI::setCurrent(current); }, + []() {}} + .template operator()(), + ...); } template @@ -1156,11 +1159,14 @@ struct TableIterator : IP, C... { { std::vector result; (framework::overloaded{ - [this, &result] requires(!is_self_index_column) () mutable { - result.emplace_back(CI::getCurrentRaw()); - }, - [](){} - }.template operator()(), ...); + [this, &result] + requires(!is_self_index_column) + () mutable { + result.emplace_back(CI::getCurrentRaw()); + }, + []() {}} + .template operator()(), + ...); return result; } @@ -1179,9 +1185,12 @@ struct TableIterator : IP, C... { void doSetCurrentIndexRaw(framework::pack p, std::vector&& ptrs) { (framework::overloaded{ - [&ptrs, p, this] requires(!is_self_index_column) () { CI::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); }, - [](){} - }.template operator()(), ...); + [&ptrs, p, this] + requires(!is_self_index_column) + () { CI::setCurrentRaw(ptrs[framework::has_type_at_v(p)]); }, + []() {}} + .template operator()(), + ...); } template @@ -1190,9 +1199,10 @@ struct TableIterator : IP, C... { o2::soa::Binding b; b.bind(ptr); (framework::overloaded{ - [&ptr, &b, this]() { CI::setCurrentRaw(b); }, - [](){} - }.template operator()(), ...); + [&ptr, &b, this]() { CI::setCurrentRaw(b); }, + []() {}} + .template operator()(), + ...); } void bindExternalIndicesRaw(std::vector&& ptrs) @@ -1388,18 +1398,24 @@ template consteval static bool hasIndexTo(framework::pack&&) { return (framework::overloaded{ - [] requires(!is_self_index_column) () { return o2::soa::is_binding_compatible_v(); }, - [](){ return false; } - }.template operator()() || ...); + [] + requires(!is_self_index_column) + () { return o2::soa::is_binding_compatible_v(); }, + []() { return false; }} + .template operator()() || + ...); } template consteval static bool hasSortedIndexTo(framework::pack&&) { return (framework::overloaded{ - [] requires(!is_self_index_column) () {return (CI::sorted && o2::soa::is_binding_compatible_v()); }, - [](){} - }.template operator()() || ...); + [] + requires(!is_self_index_column) + () { return (CI::sorted && o2::soa::is_binding_compatible_v()); }, + []() {}} + .template operator()() || + ...); } template @@ -2085,9 +2101,10 @@ class Table void doBindInternalIndicesExplicit(framework::pack, o2::soa::Binding binding) { (framework::overloaded{ - [this, &binding]() { static_cast(mBegin).setCurrentRaw(binding); }, - [](){} - }.template operator()(), ...); + [this, &binding]() { static_cast(mBegin).setCurrentRaw(binding); }, + []() {}} + .template operator()(), + ...); } void bindExternalIndicesRaw(std::vector&& ptrs)