@@ -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>
@@ -1293,6 +1293,9 @@ struct ArrowHelpers {
12931293template <typename T>
12941294concept is_iterator = framework::base_of_template<TableIterator, T> || framework::specialization_of_template<TableIterator, T>;
12951295
1296+ template <typename T>
1297+ concept is_table_or_iterator = is_table<T> || is_iterator<T>;
1298+
12961299template <typename T>
12971300concept with_originals = requires {
12981301 T::originals.size ();
@@ -2724,7 +2727,7 @@ consteval auto getIndexTargets()
27242727 return !(*mColumnIterator ).empty (); \
27252728 } \
27262729 \
2727- template <typename T> \
2730+ template <soa::is_table T> \
27282731 auto _Getter_##_as() const \
27292732 { \
27302733 if (O2_BUILTIN_UNLIKELY (mBinding .ptr == nullptr )) { \
@@ -2734,10 +2737,15 @@ consteval auto getIndexTargets()
27342737 if (O2_BUILTIN_UNLIKELY (t == nullptr )) { \
27352738 o2::soa::dereferenceWithWrongType (#_Getter_, #_Table_); \
27362739 } \
2737- 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; \
27382746 } \
27392747 \
2740- template <typename T> \
2748+ template <soa::is_filtered_table T> \
27412749 auto filtered_##_Getter_##_as() const \
27422750 { \
27432751 if (O2_BUILTIN_UNLIKELY (mBinding .ptr == nullptr )) { \
@@ -2747,35 +2755,15 @@ consteval auto getIndexTargets()
27472755 if (O2_BUILTIN_UNLIKELY (t == nullptr )) { \
27482756 o2::soa::dereferenceWithWrongType (#_Getter_, #_Table_); \
27492757 } \
2750- return getFilteredIterators<T>(); \
2751- } \
2752- \
2753- template <typename T> \
2754- auto getIterators () const \
2755- { \
2756- auto result = std::vector<typename T::unfiltered_iterator>(); \
2757- for (auto & i : *mColumnIterator ) { \
2758- result.push_back (mBinding .get <T>()->rawIteratorAt (i)); \
2759- } \
2760- return result; \
2761- } \
2762- \
2763- template <typename T> \
2764- std::vector<typename T::iterator> getFilteredIterators () const \
2765- { \
2766- if constexpr (o2::soa::is_filtered_table<T>) { \
2767- auto result = std::vector<typename T::iterator>(); \
2768- for (auto const & i : *mColumnIterator ) { \
2769- auto pos = mBinding .get <T>()->isInSelectedRows (i); \
2770- if (pos > 0 ) { \
2771- result.emplace_back (mBinding .get <T>()->iteratorAt (pos)); \
2772- } \
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)); \
27732764 } \
2774- return result; \
2775- } else { \
2776- static_assert (o2::framework::always_static_assert_v<T>, " T is not a Filtered type" ); \
27772765 } \
2778- return {}; \
2766+ return result; \
27792767 } \
27802768 \
27812769 auto _Getter_ () const \
@@ -3090,15 +3078,9 @@ consteval auto getIndexTargets()
30903078 if (O2_BUILTIN_UNLIKELY (t == nullptr )) { \
30913079 o2::soa::dereferenceWithWrongType (#_Getter_, " self" ); \
30923080 } \
3093- return getIterators<T>(); \
3094- } \
3095- \
3096- template <typename T> \
3097- auto getIterators () const \
3098- { \
30993081 auto result = std::vector<typename T::unfiltered_iterator>(); \
31003082 for (auto & i : *mColumnIterator ) { \
3101- result.push_back (mBinding . get <T>() ->rawIteratorAt (i)); \
3083+ result.push_back (t ->rawIteratorAt (i)); \
31023084 } \
31033085 return result; \
31043086 } \
0 commit comments