@@ -405,15 +405,15 @@ class Table;
405405// / Type-checking index column binding
406406struct 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