Skip to content

Commit 9a6f531

Browse files
committed
DPL Analysis: remove unnecessary instances of selected_pack
1 parent 4152761 commit 9a6f531

File tree

2 files changed

+50
-30
lines changed

2 files changed

+50
-30
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,6 @@ template <typename D, typename... Cs>
213213
struct TableMetadata {
214214
using columns = framework::pack<Cs...>;
215215
using persistent_columns_t = framework::selected_pack<soa::is_persistent_column_t, Cs...>;
216-
using external_index_columns_t = framework::selected_pack<soa::is_external_index_t, Cs...>;
217-
using internal_index_columns_t = framework::selected_pack<soa::is_self_index_t, Cs...>;
218216

219217
template <typename Key, typename... PCs>
220218
static consteval std::array<bool, sizeof...(PCs)> getMap(framework::pack<PCs...>)
@@ -1036,16 +1034,23 @@ concept can_bind = requires(T&& t) {
10361034
template <typename... C>
10371035
concept has_index = (is_indexing_column<C> || ...);
10381036

1037+
template <is_index_column C>
1038+
requires (!is_self_index_column<C>)
1039+
auto getBinding() -> typename C::binding_t {}
1040+
1041+
template <typename C>
1042+
auto getBinding() -> void {}
1043+
10391044
template <typename D, typename O, typename IP, typename... C>
10401045
struct TableIterator : IP, C... {
10411046
public:
10421047
using self_t = TableIterator<D, O, IP, C...>;
10431048
using policy_t = IP;
10441049
using all_columns = framework::pack<C...>;
10451050
using persistent_columns_t = framework::selected_pack<soa::is_persistent_column_t, C...>;
1046-
using external_index_columns_t = framework::selected_pack<soa::is_external_index_t, C...>;
1047-
using internal_index_columns_t = framework::selected_pack<soa::is_self_index_t, C...>;
1048-
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{}));
1051+
using bindings_pack_t = decltype([]<typename... Cs>(framework::pack<Cs...>) {
1052+
return framework::pack<decltype(getBinding<Cs>())...>{};
1053+
}(all_columns{}));
10491054

10501055
TableIterator(arrow::ChunkedArray* columnData[sizeof...(C)], IP&& policy)
10511056
: IP{policy},
@@ -1138,7 +1143,7 @@ struct TableIterator : IP, C... {
11381143
template <typename... CL, typename TA>
11391144
void doSetCurrentIndex(framework::pack<CL...>, TA* current)
11401145
{
1141-
(CL::setCurrent(current), ...);
1146+
([&current, this](){ if constexpr (is_index_column<CL> && !is_self_index_column<CL>) {CL::setCurrent(current);} }(), ...);
11421147
}
11431148

11441149
template <typename CL>
@@ -1150,43 +1155,49 @@ struct TableIterator : IP, C... {
11501155
template <typename... Cs>
11511156
auto getIndexBindingsImpl(framework::pack<Cs...>) const
11521157
{
1153-
return std::vector<o2::soa::Binding>{static_cast<Cs const&>(*this).getCurrentRaw()...};
1158+
std::vector<o2::soa::Binding> result;
1159+
([this, &result](){
1160+
if constexpr (is_index_column<Cs> && !is_self_index_column<Cs>) {
1161+
result.emplace_back(static_cast<Cs const&>(*this).getCurrentRaw());
1162+
}
1163+
}(), ...);
1164+
return result;
11541165
}
11551166

11561167
auto getIndexBindings() const
11571168
{
1158-
return getIndexBindingsImpl(external_index_columns_t{});
1169+
return getIndexBindingsImpl(all_columns{});
11591170
}
11601171

11611172
template <typename... TA>
11621173
void bindExternalIndices(TA*... current)
11631174
{
1164-
(doSetCurrentIndex(external_index_columns_t{}, current), ...);
1175+
(doSetCurrentIndex(all_columns{}, current), ...);
11651176
}
11661177

11671178
template <typename... Cs>
11681179
void doSetCurrentIndexRaw(framework::pack<Cs...> p, std::vector<o2::soa::Binding>&& ptrs)
11691180
{
1170-
(Cs::setCurrentRaw(ptrs[framework::has_type_at_v<Cs>(p)]), ...);
1181+
([&ptrs, p, this](){ if constexpr (is_index_column<Cs> && !is_self_index_column<Cs>) { Cs::setCurrentRaw(ptrs[framework::has_type_at_v<Cs>(p)]); } }(), ...);
11711182
}
11721183

11731184
template <typename... Cs, typename I>
11741185
void doSetCurrentInternal(framework::pack<Cs...>, I const* ptr)
11751186
{
11761187
o2::soa::Binding b;
11771188
b.bind(ptr);
1178-
(Cs::setCurrentRaw(b), ...);
1189+
([&ptr, &b, this](){ if constexpr (is_self_index_column<Cs>) { Cs::setCurrentRaw(b); } }(), ...);
11791190
}
11801191

11811192
void bindExternalIndicesRaw(std::vector<o2::soa::Binding>&& ptrs)
11821193
{
1183-
doSetCurrentIndexRaw(external_index_columns_t{}, std::forward<std::vector<o2::soa::Binding>>(ptrs));
1194+
doSetCurrentIndexRaw(all_columns{}, std::forward<std::vector<o2::soa::Binding>>(ptrs));
11841195
}
11851196

11861197
template <typename I>
11871198
void bindInternalIndices(I const* table)
11881199
{
1189-
doSetCurrentInternal(internal_index_columns_t{}, table);
1200+
doSetCurrentInternal(all_columns{}, table);
11901201
}
11911202

11921203
private:
@@ -1370,25 +1381,25 @@ static constexpr std::string getLabelFromTypeForKey(std::string const& key)
13701381
template <typename B, typename... C>
13711382
consteval static bool hasIndexTo(framework::pack<C...>&&)
13721383
{
1373-
return (o2::soa::is_binding_compatible_v<B, typename C::binding_t>() || ...);
1384+
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; } }() || ...);
13741385
}
13751386

13761387
template <typename B, typename... C>
13771388
consteval static bool hasSortedIndexTo(framework::pack<C...>&&)
13781389
{
1379-
return ((C::sorted && o2::soa::is_binding_compatible_v<B, typename C::binding_t>()) || ...);
1390+
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; }}() || ...);
13801391
}
13811392

13821393
template <typename B, typename Z>
13831394
consteval static bool relatedByIndex()
13841395
{
1385-
return hasIndexTo<B>(typename Z::table_t::external_index_columns_t{});
1396+
return hasIndexTo<B>(typename Z::table_t::columns_t{});
13861397
}
13871398

13881399
template <typename B, typename Z>
13891400
consteval static bool relatedBySortedIndex()
13901401
{
1391-
return hasSortedIndexTo<B>(typename Z::table_t::external_index_columns_t{});
1402+
return hasSortedIndexTo<B>(typename Z::table_t::columns_t{});
13921403
}
13931404
} // namespace o2::soa
13941405

@@ -1716,16 +1727,13 @@ class Table
17161727
using persistent_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_persistent_column_t, C...> {}(columns_t{}));
17171728
using column_types = decltype([]<typename... C>(framework::pack<C...>) -> framework::pack<typename C::type...> {}(persistent_columns_t{}));
17181729

1719-
using external_index_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_external_index_t, C...> {}(columns_t{}));
1720-
using internal_index_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_self_index_t, C...> {}(columns_t{}));
17211730
template <typename IP>
17221731
using base_iterator = decltype(base_iter<D, O, IP>(columns_t{}));
17231732

17241733
template <typename IP, typename Parent, typename... T>
17251734
struct TableIteratorBase : base_iterator<IP> {
17261735
using columns_t = typename Parent::columns_t;
1727-
using external_index_columns_t = typename Parent::external_index_columns_t;
1728-
using bindings_pack_t = decltype([]<typename... C>(framework::pack<C...>) -> framework::pack<typename C::binding_t...> {}(external_index_columns_t{}));
1736+
using bindings_pack_t = typename base_iterator<IP>::bindings_pack_t;
17291737
// static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
17301738
static constexpr auto originals = Parent::originals;
17311739
using policy_t = IP;
@@ -1818,7 +1826,7 @@ class Table
18181826
using decayed = std::decay_t<TI>;
18191827
if constexpr (framework::has_type<decayed>(bindings_pack_t{})) { // index to another table
18201828
constexpr auto idx = framework::has_type_at_v<decayed>(bindings_pack_t{});
1821-
return framework::pack_element_t<idx, external_index_columns_t>::getId();
1829+
return framework::pack_element_t<idx, columns_t>::getId();
18221830
} else if constexpr (std::same_as<decayed, Parent>) { // self index
18231831
return this->globalIndex();
18241832
} else if constexpr (is_indexing_column<decayed>) { // soa::Index<>
@@ -2043,13 +2051,13 @@ class Table
20432051

20442052
void bindInternalIndicesExplicit(o2::soa::Binding binding)
20452053
{
2046-
doBindInternalIndicesExplicit(internal_index_columns_t{}, binding);
2054+
doBindInternalIndicesExplicit(columns_t{}, binding);
20472055
}
20482056

20492057
template <typename... Cs>
20502058
void doBindInternalIndicesExplicit(framework::pack<Cs...>, o2::soa::Binding binding)
20512059
{
2052-
(static_cast<Cs>(mBegin).setCurrentRaw(binding), ...);
2060+
([this, &binding](){ if constexpr (is_self_index_column<Cs>) { static_cast<Cs>(mBegin).setCurrentRaw(binding); } }(), ...);
20532061
}
20542062

20552063
void bindExternalIndicesRaw(std::vector<o2::soa::Binding>&& ptrs)
@@ -2066,7 +2074,7 @@ class Table
20662074
template <typename T>
20672075
void copyIndexBindings(T& dest) const
20682076
{
2069-
doCopyIndexBindings(external_index_columns_t{}, dest);
2077+
doCopyIndexBindings(columns_t{}, dest);
20702078
}
20712079

20722080
auto select(framework::expressions::Filter const& f) const
@@ -3343,7 +3351,6 @@ class FilteredBase : public T
33433351
using T::originals;
33443352
using columns_t = typename T::columns_t;
33453353
using persistent_columns_t = typename T::persistent_columns_t;
3346-
using external_index_columns_t = typename T::external_index_columns_t;
33473354

33483355
using iterator = T::template iterator_template_o<FilteredIndexPolicy, self_t>;
33493356
using unfiltered_iterator = T::template iterator_template_o<DefaultIndexPolicy, self_t>;
@@ -3489,7 +3496,7 @@ class FilteredBase : public T
34893496
template <typename T1>
34903497
void copyIndexBindings(T1& dest) const
34913498
{
3492-
doCopyIndexBindings(external_index_columns_t{}, dest);
3499+
doCopyIndexBindings(columns_t{}, dest);
34933500
}
34943501

34953502
template <typename T1>

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)