diff --git a/tree/dataframe/inc/ROOT/RDFInterface.hxx b/tree/dataframe/inc/ROOT/RDFInterface.hxx index 64336376c76643cdd044a230b6f0063c2701ae71..2cc1ccd5ee0b829364907e54758cc113efae0ccd 100644 --- a/tree/dataframe/inc/ROOT/RDFInterface.hxx +++ b/tree/dataframe/inc/ROOT/RDFInterface.hxx @@ -232,7 +232,7 @@ public: template <typename F, typename std::enable_if<!std::is_convertible<F, std::string>::value, int>::type = 0> RInterface<Proxied, DS_t> Define(std::string_view name, F expression, const ColumnNames_t &columns = {}) { - return DefineImpl<F, RDFDetail::TCCHelperTypes::TNothing>(name, std::move(expression), columns); + return DefineImpl<F, RDFDetail::CustomColExtraArgs::None>(name, std::move(expression), columns); } // clang-format on @@ -260,7 +260,7 @@ public: template <typename F> RInterface<Proxied, DS_t> DefineSlot(std::string_view name, F expression, const ColumnNames_t &columns = {}) { - return DefineImpl<F, RDFDetail::TCCHelperTypes::TSlot>(name, std::move(expression), columns); + return DefineImpl<F, RDFDetail::CustomColExtraArgs::Slot>(name, std::move(expression), columns); } // clang-format on @@ -289,7 +289,7 @@ public: template <typename F> RInterface<Proxied, DS_t> DefineSlotEntry(std::string_view name, F expression, const ColumnNames_t &columns = {}) { - return DefineImpl<F, RDFDetail::TCCHelperTypes::TSlotAndEntry>(name, std::move(expression), columns); + return DefineImpl<F, RDFDetail::CustomColExtraArgs::SlotAndEntry>(name, std::move(expression), columns); } // clang-format on @@ -1427,14 +1427,14 @@ private: // Entry number column const auto entryColName = "tdfentry_"; auto entryColGen = [](unsigned int, ULong64_t entry) { return entry; }; - DefineImpl<decltype(entryColGen), RDFDetail::TCCHelperTypes::TSlotAndEntry>(entryColName, std::move(entryColGen), - {}); + DefineImpl<decltype(entryColGen), RDFDetail::CustomColExtraArgs::SlotAndEntry>(entryColName, + std::move(entryColGen), {}); fValidCustomColumns.emplace_back(entryColName); // Slot number column const auto slotColName = "tdfslot_"; auto slotColGen = [](unsigned int slot) { return slot; }; - DefineImpl<decltype(slotColGen), RDFDetail::TCCHelperTypes::TSlot>(slotColName, std::move(slotColGen), {}); + DefineImpl<decltype(slotColGen), RDFDetail::CustomColExtraArgs::Slot>(slotColName, std::move(slotColGen), {}); fValidCustomColumns.emplace_back(slotColName); } @@ -1558,9 +1558,9 @@ private: using ArgTypes_t = typename TTraits::CallableTraits<F>::arg_types; using ColTypesTmp_t = typename RDFInternal::RemoveFirstParameterIf< - std::is_same<CustomColumnType, RDFDetail::TCCHelperTypes::TSlot>::value, ArgTypes_t>::type; + std::is_same<CustomColumnType, RDFDetail::CustomColExtraArgs::Slot>::value, ArgTypes_t>::type; using ColTypes_t = typename RDFInternal::RemoveFirstTwoParametersIf< - std::is_same<CustomColumnType, RDFDetail::TCCHelperTypes::TSlotAndEntry>::value, ColTypesTmp_t>::type; + std::is_same<CustomColumnType, RDFDetail::CustomColExtraArgs::SlotAndEntry>::value, ColTypesTmp_t>::type; constexpr auto nColumns = ColTypes_t::list_size; const auto validColumnNames = GetValidatedColumnNames(nColumns, columns); diff --git a/tree/dataframe/inc/ROOT/RDFInterfaceUtils.hxx b/tree/dataframe/inc/ROOT/RDFInterfaceUtils.hxx index ab8375703ecad6e6edce6c19ae53ab1a6bde21c8..af1b77473572b4dbac45bc9f0dc6f8b1731245e3 100644 --- a/tree/dataframe/inc/ROOT/RDFInterfaceUtils.hxx +++ b/tree/dataframe/inc/ROOT/RDFInterfaceUtils.hxx @@ -261,7 +261,7 @@ void DefineDSColumnHelper(std::string_view name, RLoopManager &lm, RDataSource & { auto readers = ds.GetColumnReaders<T>(name); auto getValue = [readers](unsigned int slot) { return *readers[slot]; }; - using NewCol_t = RCustomColumn<decltype(getValue), TCCHelperTypes::TSlot>; + using NewCol_t = RCustomColumn<decltype(getValue), CustomColExtraArgs::Slot>; lm.Book(std::make_shared<NewCol_t>(name, std::move(getValue), ColumnNames_t{}, &lm, /*isDSColumn=*/true)); lm.AddCustomColumnName(name); lm.AddDataSourceColumn(name); @@ -305,7 +305,7 @@ void JitFilterHelper(F &&f, const ColumnNames_t &cols, std::string_view name, RJ template <typename F> void JitDefineHelper(F &&f, const ColumnNames_t &cols, std::string_view name, RLoopManager *lm) { - using NewCol_t = RCustomColumn<F, TCCHelperTypes::TNothing>; + using NewCol_t = RCustomColumn<F, CustomColExtraArgs::None>; using ColTypes_t = typename TTraits::CallableTraits<F>::arg_types; constexpr auto nColumns = ColTypes_t::list_size; diff --git a/tree/dataframe/inc/ROOT/RDFNodes.hxx b/tree/dataframe/inc/ROOT/RDFNodes.hxx index 2b1d027dfa69dfbdd1b60ee8f99ae9aa360f8a9f..4e4b33723b4e4db200bb0c1a716268134e7dd616 100644 --- a/tree/dataframe/inc/ROOT/RDFNodes.hxx +++ b/tree/dataframe/inc/ROOT/RDFNodes.hxx @@ -477,26 +477,25 @@ public: }; // clang-format off -namespace TCCHelperTypes { -struct TNothing; -struct TSlot; -struct TSlotAndEntry; +namespace CustomColExtraArgs { +struct None{}; +struct Slot{}; +struct SlotAndEntry{}; } // clang-format on -template <typename F, typename UPDATE_HELPER_TYPE = TCCHelperTypes::TNothing> +template <typename F, typename ExtraArgsTag = CustomColExtraArgs::None> class RCustomColumn final : public RCustomColumnBase { // shortcuts - using TNothing = TCCHelperTypes::TNothing; - using TSlot = TCCHelperTypes::TSlot; - using TSlotAndEntry = TCCHelperTypes::TSlotAndEntry; - using UHT_t = UPDATE_HELPER_TYPE; + using NoneTag = CustomColExtraArgs::None; + using SlotTag = CustomColExtraArgs::Slot; + using SlotAndEntryTag = CustomColExtraArgs::SlotAndEntry; // other types using FunParamTypes_t = typename CallableTraits<F>::arg_types; - using BranchTypesTmp_t = - typename RDFInternal::RemoveFirstParameterIf<std::is_same<TSlot, UHT_t>::value, FunParamTypes_t>::type; - using ColumnTypes_t = typename RDFInternal::RemoveFirstTwoParametersIf<std::is_same<TSlotAndEntry, UHT_t>::value, - BranchTypesTmp_t>::type; + using ColumnTypesTmp_t = + RDFInternal::RemoveFirstParameterIf_t<std::is_same<ExtraArgsTag, SlotTag>::value, FunParamTypes_t>; + using ColumnTypes_t = + RDFInternal::RemoveFirstTwoParametersIf_t<std::is_same<ExtraArgsTag, SlotAndEntryTag>::value, ColumnTypesTmp_t>; using TypeInd_t = std::make_index_sequence<ColumnTypes_t::list_size>; using ret_type = typename CallableTraits<F>::ret_type; // Avoid instantiating vector<bool> as `operator[]` returns temporaries in that case. Use std::deque instead. @@ -532,7 +531,7 @@ public: { if (entry != fLastCheckedEntry[slot]) { // evaluate this filter, cache the result - UpdateHelper(slot, entry, TypeInd_t(), ColumnTypes_t(), (UPDATE_HELPER_TYPE *)nullptr); + UpdateHelper(slot, entry, TypeInd_t(), ColumnTypes_t(), ExtraArgsTag{}); fLastCheckedEntry[slot] = entry; } } @@ -543,8 +542,7 @@ public: } template <std::size_t... S, typename... BranchTypes> - void UpdateHelper(unsigned int slot, Long64_t entry, std::index_sequence<S...>, TypeList<BranchTypes...>, - TCCHelperTypes::TNothing *) + void UpdateHelper(unsigned int slot, Long64_t entry, std::index_sequence<S...>, TypeList<BranchTypes...>, NoneTag) { fLastResults[slot] = fExpression(std::get<S>(fValues[slot]).Get(entry)...); // silence "unused parameter" warnings in gcc @@ -553,8 +551,7 @@ public: } template <std::size_t... S, typename... BranchTypes> - void UpdateHelper(unsigned int slot, Long64_t entry, std::index_sequence<S...>, TypeList<BranchTypes...>, - TCCHelperTypes::TSlot *) + void UpdateHelper(unsigned int slot, Long64_t entry, std::index_sequence<S...>, TypeList<BranchTypes...>, SlotTag) { fLastResults[slot] = fExpression(slot, std::get<S>(fValues[slot]).Get(entry)...); // silence "unused parameter" warnings in gcc @@ -563,8 +560,8 @@ public: } template <std::size_t... S, typename... BranchTypes> - void UpdateHelper(unsigned int slot, Long64_t entry, std::index_sequence<S...>, TypeList<BranchTypes...>, - TCCHelperTypes::TSlotAndEntry *) + void + UpdateHelper(unsigned int slot, Long64_t entry, std::index_sequence<S...>, TypeList<BranchTypes...>, SlotAndEntryTag) { fLastResults[slot] = fExpression(slot, entry, std::get<S>(fValues[slot]).Get(entry)...); // silence "unused parameter" warnings in gcc