Skip to content

Commit 7218b61

Browse files
committed
DPL Analysis: remove unnecessary instances of selected_pack
1 parent f6a7fe4 commit 7218b61

File tree

3 files changed

+54
-31
lines changed

3 files changed

+54
-31
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,6 @@ template <typename D, typename... Cs>
208208
struct TableMetadata {
209209
using columns = framework::pack<Cs...>;
210210
using persistent_columns_t = framework::selected_pack<soa::is_persistent_column_t, Cs...>;
211-
using external_index_columns_t = framework::selected_pack<soa::is_external_index_t, Cs...>;
212-
using internal_index_columns_t = framework::selected_pack<soa::is_self_index_t, Cs...>;
213211

214212
template <typename Key, typename... PCs>
215213
static consteval std::array<bool, sizeof...(PCs)> getMap(framework::pack<PCs...>)
@@ -1028,16 +1026,23 @@ concept can_bind = requires(T&& t) {
10281026
template <typename... C>
10291027
concept has_index = (is_indexing_column<C> || ...);
10301028

1029+
template <is_index_column C>
1030+
requires (!is_self_index_column<C>)
1031+
auto getBinding() -> typename C::binding_t {}
1032+
1033+
template <typename C>
1034+
auto getBinding() -> void {}
1035+
10311036
template <typename D, typename O, typename IP, typename... C>
10321037
struct TableIterator : IP, C... {
10331038
public:
10341039
using self_t = TableIterator<D, O, IP, C...>;
10351040
using policy_t = IP;
10361041
using all_columns = framework::pack<C...>;
10371042
using persistent_columns_t = framework::selected_pack<soa::is_persistent_column_t, C...>;
1038-
using external_index_columns_t = framework::selected_pack<soa::is_external_index_t, C...>;
1039-
using internal_index_columns_t = framework::selected_pack<soa::is_self_index_t, C...>;
1040-
using bindings_pack_t = decltype([]<typename... Cs>(framework::pack<Cs...>) -> framework::pack<typename Cs::binding_t...> {}(external_index_columns_t{})); // decltype(extractBindings(external_index_columns_t{}));
1043+
using bindings_pack_t = decltype([]<typename... Cs>(framework::pack<Cs...>) {
1044+
return framework::pack<decltype(getBinding<Cs>())...>{};
1045+
}(all_columns{}));
10411046

10421047
TableIterator(arrow::ChunkedArray* columnData[sizeof...(C)], IP&& policy)
10431048
: IP{policy},
@@ -1130,7 +1135,7 @@ struct TableIterator : IP, C... {
11301135
template <typename... CL, typename TA>
11311136
void doSetCurrentIndex(framework::pack<CL...>, TA* current)
11321137
{
1133-
(CL::setCurrent(current), ...);
1138+
([&current, this](){ if constexpr (is_index_column<CL> && !is_self_index_column<CL>) {CL::setCurrent(current);} }(), ...);
11341139
}
11351140

11361141
template <typename CL>
@@ -1142,43 +1147,49 @@ struct TableIterator : IP, C... {
11421147
template <typename... Cs>
11431148
auto getIndexBindingsImpl(framework::pack<Cs...>) const
11441149
{
1145-
return std::vector<o2::soa::Binding>{static_cast<Cs const&>(*this).getCurrentRaw()...};
1150+
std::vector<o2::soa::Binding> result;
1151+
([this, &result](){
1152+
if constexpr (is_index_column<Cs> && !is_self_index_column<Cs>) {
1153+
result.emplace_back(static_cast<Cs const&>(*this).getCurrentRaw());
1154+
}
1155+
}(), ...);
1156+
return result;
11461157
}
11471158

11481159
auto getIndexBindings() const
11491160
{
1150-
return getIndexBindingsImpl(external_index_columns_t{});
1161+
return getIndexBindingsImpl(all_columns{});
11511162
}
11521163

11531164
template <typename... TA>
11541165
void bindExternalIndices(TA*... current)
11551166
{
1156-
(doSetCurrentIndex(external_index_columns_t{}, current), ...);
1167+
(doSetCurrentIndex(all_columns{}, current), ...);
11571168
}
11581169

11591170
template <typename... Cs>
11601171
void doSetCurrentIndexRaw(framework::pack<Cs...> p, std::vector<o2::soa::Binding>&& ptrs)
11611172
{
1162-
(Cs::setCurrentRaw(ptrs[framework::has_type_at_v<Cs>(p)]), ...);
1173+
([&ptrs, p, this](){ if constexpr (is_index_column<Cs> && !is_self_index_column<Cs>) { Cs::setCurrentRaw(ptrs[framework::has_type_at_v<Cs>(p)]); } }(), ...);
11631174
}
11641175

11651176
template <typename... Cs, typename I>
11661177
void doSetCurrentInternal(framework::pack<Cs...>, I const* ptr)
11671178
{
11681179
o2::soa::Binding b;
11691180
b.bind(ptr);
1170-
(Cs::setCurrentRaw(b), ...);
1181+
([&ptr, &b, this](){ if constexpr (is_self_index_column<Cs>) { Cs::setCurrentRaw(b); } }(), ...);
11711182
}
11721183

11731184
void bindExternalIndicesRaw(std::vector<o2::soa::Binding>&& ptrs)
11741185
{
1175-
doSetCurrentIndexRaw(external_index_columns_t{}, std::forward<std::vector<o2::soa::Binding>>(ptrs));
1186+
doSetCurrentIndexRaw(all_columns{}, std::forward<std::vector<o2::soa::Binding>>(ptrs));
11761187
}
11771188

11781189
template <typename I>
11791190
void bindInternalIndices(I const* table)
11801191
{
1181-
doSetCurrentInternal(internal_index_columns_t{}, table);
1192+
doSetCurrentInternal(all_columns{}, table);
11821193
}
11831194

11841195
private:
@@ -1362,25 +1373,25 @@ static constexpr std::string getLabelFromTypeForKey(std::string const& key)
13621373
template <typename B, typename... C>
13631374
consteval static bool hasIndexTo(framework::pack<C...>&&)
13641375
{
1365-
return (o2::soa::is_binding_compatible_v<B, typename C::binding_t>() || ...);
1376+
return ([](){ if constexpr (is_index_column<C> && !is_self_index_column<C>) { return o2::soa::is_binding_compatible_v<B, typename C::binding_t>(); } else { return false; } }() || ...);
13661377
}
13671378

13681379
template <typename B, typename... C>
13691380
consteval static bool hasSortedIndexTo(framework::pack<C...>&&)
13701381
{
1371-
return ((C::sorted && o2::soa::is_binding_compatible_v<B, typename C::binding_t>()) || ...);
1382+
return ([](){if constexpr (is_index_column<C> && !is_self_index_column<C>) { return (C::sorted && o2::soa::is_binding_compatible_v<B, typename C::binding_t>()); } else { return false; }}() || ...);
13721383
}
13731384

13741385
template <typename B, typename Z>
13751386
consteval static bool relatedByIndex()
13761387
{
1377-
return hasIndexTo<B>(typename Z::table_t::external_index_columns_t{});
1388+
return hasIndexTo<B>(typename Z::table_t::columns_t{});
13781389
}
13791390

13801391
template <typename B, typename Z>
13811392
consteval static bool relatedBySortedIndex()
13821393
{
1383-
return hasSortedIndexTo<B>(typename Z::table_t::external_index_columns_t{});
1394+
return hasSortedIndexTo<B>(typename Z::table_t::columns_t{});
13841395
}
13851396
} // namespace o2::soa
13861397

@@ -1723,16 +1734,13 @@ class Table
17231734
using persistent_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_persistent_column_t, C...> {}(columns_t{}));
17241735
using column_types = decltype([]<typename... C>(framework::pack<C...>) -> framework::pack<typename C::type...> {}(persistent_columns_t{}));
17251736

1726-
using external_index_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_external_index_t, C...> {}(columns_t{}));
1727-
using internal_index_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_self_index_t, C...> {}(columns_t{}));
17281737
template <typename IP>
17291738
using base_iterator = decltype(base_iter<D, O, IP>(columns_t{}));
17301739

17311740
template <typename IP, typename Parent, typename... T>
17321741
struct TableIteratorBase : base_iterator<IP> {
17331742
using columns_t = typename Parent::columns_t;
1734-
using external_index_columns_t = typename Parent::external_index_columns_t;
1735-
using bindings_pack_t = decltype([]<typename... C>(framework::pack<C...>) -> framework::pack<typename C::binding_t...> {}(external_index_columns_t{}));
1743+
using bindings_pack_t = typename base_iterator<IP>::bindings_pack_t;
17361744
// static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
17371745
static constexpr auto originals = Parent::originals;
17381746
using policy_t = IP;
@@ -1825,7 +1833,7 @@ class Table
18251833
using decayed = std::decay_t<TI>;
18261834
if constexpr (framework::has_type<decayed>(bindings_pack_t{})) { // index to another table
18271835
constexpr auto idx = framework::has_type_at_v<decayed>(bindings_pack_t{});
1828-
return framework::pack_element_t<idx, external_index_columns_t>::getId();
1836+
return framework::pack_element_t<idx, columns_t>::getId();
18291837
} else if constexpr (std::same_as<decayed, Parent>) { // self index
18301838
return this->globalIndex();
18311839
} else if constexpr (is_indexing_column<decayed>) { // soa::Index<>
@@ -2050,13 +2058,13 @@ class Table
20502058

20512059
void bindInternalIndicesExplicit(o2::soa::Binding binding)
20522060
{
2053-
doBindInternalIndicesExplicit(internal_index_columns_t{}, binding);
2061+
doBindInternalIndicesExplicit(columns_t{}, binding);
20542062
}
20552063

20562064
template <typename... Cs>
20572065
void doBindInternalIndicesExplicit(framework::pack<Cs...>, o2::soa::Binding binding)
20582066
{
2059-
(static_cast<Cs>(mBegin).setCurrentRaw(binding), ...);
2067+
([this, &binding](){ if constexpr (is_self_index_column<Cs>) { static_cast<Cs>(mBegin).setCurrentRaw(binding); } }(), ...);
20602068
}
20612069

20622070
void bindExternalIndicesRaw(std::vector<o2::soa::Binding>&& ptrs)
@@ -2073,7 +2081,7 @@ class Table
20732081
template <typename T>
20742082
void copyIndexBindings(T& dest) const
20752083
{
2076-
doCopyIndexBindings(external_index_columns_t{}, dest);
2084+
doCopyIndexBindings(columns_t{}, dest);
20772085
}
20782086

20792087
auto select(framework::expressions::Filter const& f) const
@@ -3292,7 +3300,6 @@ class FilteredBase : public T
32923300
using T::originals;
32933301
using columns_t = typename T::columns_t;
32943302
using persistent_columns_t = typename T::persistent_columns_t;
3295-
using external_index_columns_t = typename T::external_index_columns_t;
32963303

32973304
using iterator = T::template iterator_template_o<FilteredIndexPolicy, self_t>;
32983305
using unfiltered_iterator = T::template iterator_template_o<DefaultIndexPolicy, self_t>;
@@ -3438,7 +3445,7 @@ class FilteredBase : public T
34383445
template <typename T1>
34393446
void copyIndexBindings(T1& dest) const
34403447
{
3441-
doCopyIndexBindings(external_index_columns_t{}, dest);
3448+
doCopyIndexBindings(columns_t{}, dest);
34423449
}
34433450

34443451
template <typename T1>

Framework/Core/include/Framework/Configurable.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ struct Configurable : IP {
8383
template <typename T, ConfigParamKind K = ConfigParamKind::kGeneric>
8484
using MutableConfigurable = Configurable<T, K, ConfigurablePolicyMutable<T, K>>;
8585

86+
template <typename T>
87+
concept is_configurable = requires(T& t) { &T::operator typename T::type; };
88+
8689
using ConfigurableAxis = Configurable<std::vector<double>, ConfigParamKind::kAxisSpec, ConfigurablePolicyConst<std::vector<double>, ConfigParamKind::kAxisSpec>>;
8790

8891
template <typename R, typename T, typename... As>
@@ -97,7 +100,7 @@ struct ProcessConfigurable : Configurable<bool, ConfigParamKind::kProcessFlag> {
97100
};
98101

99102
template <typename T>
100-
concept is_process_configurable = base_of_template<ProcessConfigurable, T>;
103+
concept is_process_configurable = is_configurable<T> && requires(T& t) { t.process; };
101104

102105
#define PROCESS_SWITCH(_Class_, _Name_, _Help_, _Default_) \
103106
decltype(ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_}) do##_Name_ = ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_};

Framework/Core/include/Framework/GroupedCombinations.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,27 @@ auto interleaveTuples(std::tuple<T1s...>& t1, std::tuple<T2s...>& t2)
3434
return interleaveTuplesImpl(t1, t2, std::index_sequence_for<T1s...>());
3535
}
3636

37+
template <soa::is_index_column T, typename G>
38+
requires(!soa::is_self_index_column<T>)
39+
auto isIndexTo()
40+
{
41+
if constexpr (o2::soa::is_binding_compatible_v<G, typename T::binding_t>()) {
42+
return std::true_type{};
43+
} else {
44+
return std::false_type{};
45+
}
46+
}
47+
48+
template <typename T, typename G>
49+
auto isIndexTo() ->std::false_type {}
50+
3751
template <typename T, typename G>
38-
using is_index_to_g_t = typename std::conditional<o2::soa::is_binding_compatible_v<G, typename T::binding_t>(), std::true_type, std::false_type>::type;
52+
using is_index_to_g_t = decltype(isIndexTo<T, G>());
3953

4054
template <typename G, typename A>
4155
expressions::BindingNode getMatchingIndexNode()
4256
{
43-
using external_index_columns_pack = typename A::external_index_columns_t;
44-
using selected_indices_t = selected_pack_multicondition<is_index_to_g_t, pack<G>, external_index_columns_pack>;
57+
using selected_indices_t = selected_pack_multicondition<is_index_to_g_t, pack<G>, typename A::columns_t>;
4558
static_assert(pack_size(selected_indices_t{}) == 1, "No matching index column from associated to grouping");
4659
using index_column_t = pack_head_t<selected_indices_t>;
4760
return expressions::BindingNode{index_column_t::mLabel, o2::framework::TypeIdHelpers::uniqueId<typename index_column_t::column_t>(), expressions::selectArrowType<typename index_column_t::type>()};

0 commit comments

Comments
 (0)