Skip to content

Commit 597d7e1

Browse files
committed
improve getIterators
1 parent 0a354a0 commit 597d7e1

File tree

1 file changed

+19
-40
lines changed
  • Framework/Core/include/Framework

1 file changed

+19
-40
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -405,15 +405,15 @@ class Table;
405405
/// Type-checking index column binding
406406
struct Binding {
407407
void const* ptr = nullptr;
408-
size_t hash = 0;
409-
std::span<TableRef const> refs;
408+
uint32_t hash = 0;
409+
// std::span<TableRef const> refs;
410410

411411
template <typename T>
412412
void bind(T const* table)
413413
{
414414
ptr = table;
415415
hash = o2::framework::TypeIdHelpers::uniqueId<T>();
416-
refs = std::span{T::originals};
416+
// refs = std::span{T::originals};
417417
}
418418

419419
template <typename T>
@@ -2727,7 +2727,7 @@ consteval auto getIndexTargets()
27272727
return !(*mColumnIterator).empty(); \
27282728
} \
27292729
\
2730-
template <typename T> \
2730+
template <soa::is_table T> \
27312731
auto _Getter_##_as() const \
27322732
{ \
27332733
if (O2_BUILTIN_UNLIKELY(mBinding.ptr == nullptr)) { \
@@ -2737,10 +2737,15 @@ consteval auto getIndexTargets()
27372737
if (O2_BUILTIN_UNLIKELY(t == nullptr)) { \
27382738
o2::soa::dereferenceWithWrongType(#_Getter_, #_Table_); \
27392739
} \
2740-
return getIterators<T>(); \
2740+
auto result = std::vector<typename T::unfiltered_iterator>(); \
2741+
result.reserve((*mColumnIterator).size()); \
2742+
for (auto& i : *mColumnIterator) { \
2743+
result.emplace_back(t->rawIteratorAt(i)); \
2744+
} \
2745+
return result; \
27412746
} \
27422747
\
2743-
template <typename T> \
2748+
template <soa::is_filtered_table T> \
27442749
auto filtered_##_Getter_##_as() const \
27452750
{ \
27462751
if (O2_BUILTIN_UNLIKELY(mBinding.ptr == nullptr)) { \
@@ -2750,35 +2755,15 @@ consteval auto getIndexTargets()
27502755
if (O2_BUILTIN_UNLIKELY(t == nullptr)) { \
27512756
o2::soa::dereferenceWithWrongType(#_Getter_, #_Table_); \
27522757
} \
2753-
return getFilteredIterators<T>(); \
2754-
} \
2755-
\
2756-
template <typename T> \
2757-
auto getIterators() const \
2758-
{ \
2759-
auto result = std::vector<typename T::unfiltered_iterator>(); \
2760-
for (auto& i : *mColumnIterator) { \
2761-
result.push_back(mBinding.get<T>()->rawIteratorAt(i)); \
2762-
} \
2763-
return result; \
2764-
} \
2765-
\
2766-
template <typename T> \
2767-
std::vector<typename T::iterator> getFilteredIterators() const \
2768-
{ \
2769-
if constexpr (o2::soa::is_filtered_table<T>) { \
2770-
auto result = std::vector<typename T::iterator>(); \
2771-
for (auto const& i : *mColumnIterator) { \
2772-
auto pos = mBinding.get<T>()->isInSelectedRows(i); \
2773-
if (pos > 0) { \
2774-
result.emplace_back(mBinding.get<T>()->iteratorAt(pos)); \
2775-
} \
2758+
auto result = std::vector<typename T::iterator>(); \
2759+
result.reserve((*mColumnIterator).size()); \
2760+
for (auto const& i : *mColumnIterator) { \
2761+
auto pos = t->isInSelectedRows(i); \
2762+
if (pos > 0) { \
2763+
result.emplace_back(t->iteratorAt(pos)); \
27762764
} \
2777-
return result; \
2778-
} else { \
2779-
static_assert(o2::framework::always_static_assert_v<T>, "T is not a Filtered type"); \
27802765
} \
2781-
return {}; \
2766+
return result; \
27822767
} \
27832768
\
27842769
auto _Getter_() const \
@@ -3093,15 +3078,9 @@ consteval auto getIndexTargets()
30933078
if (O2_BUILTIN_UNLIKELY(t == nullptr)) { \
30943079
o2::soa::dereferenceWithWrongType(#_Getter_, "self"); \
30953080
} \
3096-
return getIterators<T>(); \
3097-
} \
3098-
\
3099-
template <typename T> \
3100-
auto getIterators() const \
3101-
{ \
31023081
auto result = std::vector<typename T::unfiltered_iterator>(); \
31033082
for (auto& i : *mColumnIterator) { \
3104-
result.push_back(mBinding.get<T>()->rawIteratorAt(i)); \
3083+
result.push_back(t->rawIteratorAt(i)); \
31053084
} \
31063085
return result; \
31073086
} \

0 commit comments

Comments
 (0)