@@ -1451,12 +1451,7 @@ using PresliceOptional = PresliceBase<T, true, true>;
14511451
14521452namespace o2 ::soa
14531453{
1454- template <typename T>
1455- class FilteredBase ;
1456- template <typename T>
1457- class Filtered ;
1458-
1459- template <typename T>
1454+ template <soa::is_table T>
14601455class FilteredBase ;
14611456template <typename T>
14621457class Filtered ;
@@ -1728,7 +1723,8 @@ class Table
17281723 using columns_t = typename Parent::columns_t ;
17291724 using external_index_columns_t = typename Parent::external_index_columns_t ;
17301725 using bindings_pack_t = decltype ([]<typename ... C>(framework::pack<C...>) -> framework::pack<typename C::binding_t ...> {}(external_index_columns_t {}));
1731- static constexpr const std::array<TableRef, sizeof ...(T)> originals{T::ref...};
1726+ // static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
1727+ static constexpr auto originals = Parent::originals;
17321728 using policy_t = IP;
17331729 using parent_t = Parent;
17341730
@@ -1741,7 +1737,7 @@ class Table
17411737
17421738 template <typename P, typename ... Os>
17431739 TableIteratorBase& operator =(TableIteratorBase<IP, P, Os...> other)
1744- requires (P::ref::signature == Parent::ref::signature )
1740+ requires (P::ref.desc_hash == Parent::ref.desc_hash )
17451741 {
17461742 static_cast <base_iterator<IP>&>(*this ) = static_cast <base_iterator<IP>>(other);
17471743 return *this ;
@@ -1762,16 +1758,16 @@ class Table
17621758 return *this ;
17631759 }
17641760
1765- template <typename P, typename ... Os>
1766- TableIteratorBase (TableIteratorBase<IP, P, Os...> const & other)
1767- requires (P::ref::signature == Parent::ref::signature )
1761+ template <typename P, typename O1, typename ... Os>
1762+ TableIteratorBase (TableIteratorBase<IP, P, O1, Os...> const & other)
1763+ requires (P::ref.desc_hash == Parent::ref.desc_hash )
17681764 {
17691765 *this = other;
17701766 }
17711767
1772- template <typename P, typename ... Os>
1773- TableIteratorBase (TableIteratorBase<IP, P, Os...>&& other) noexcept
1774- requires (P::ref::signature == Parent::ref::signature )
1768+ template <typename P, typename O1, typename ... Os>
1769+ TableIteratorBase (TableIteratorBase<IP, P, O1, Os...>&& other) noexcept
1770+ requires (P::ref.desc_hash == Parent::ref.desc_hash )
17751771 {
17761772 *this = other;
17771773 }
@@ -2503,7 +2499,7 @@ consteval auto getIndexTargets()
25032499 for (auto const & i : *mColumnIterator ) { \
25042500 auto pos = mBinding .get <T>()->isInSelectedRows (i); \
25052501 if (pos > 0 ) { \
2506- result.push_back (mBinding .get <T>()->iteratorAt (pos)); \
2502+ result.emplace_back (mBinding .get <T>()->iteratorAt (pos)); \
25072503 } \
25082504 } \
25092505 return result; \
@@ -3061,9 +3057,6 @@ consteval auto getIndexTargets()
30613057
30623058namespace o2::soa
30633059{
3064- // template <typename T>
3065- // class FilteredBase;
3066-
30673060template <typename D, typename ... Ts>
30683061struct JoinFull : Table<o2::aod::Hash<" JOIN" _h>, D, o2::aod::Hash<" JOIN" _h>, Ts...> {
30693062 using base = Table<o2::aod::Hash<" JOIN" _h>, D, o2::aod::Hash<" JOIN" _h>, Ts...>;
@@ -3201,7 +3194,7 @@ constexpr auto concat(Ts const&... t)
32013194 return Concat<Ts...>{t...};
32023195}
32033196
3204- template <typename T>
3197+ template <soa::is_table T>
32053198class FilteredBase : public T
32063199{
32073200 public:
@@ -3473,7 +3466,8 @@ class Filtered : public FilteredBase<T>
34733466 public:
34743467 using base_t = T;
34753468 using self_t = Filtered<T>;
3476- using table_t = typename FilteredBase<T>::table_t ;
3469+ using table_t = typename T::table_t ;
3470+ using columns_t = typename T::columns_t ;
34773471
34783472 using iterator = T::template iterator_template_o<FilteredIndexPolicy, self_t >;
34793473 using unfiltered_iterator = T::template iterator_template_o<DefaultIndexPolicy, self_t >;
@@ -3633,9 +3627,10 @@ class Filtered<Filtered<T>> : public FilteredBase<typename T::table_t>
36333627 using self_t = Filtered<Filtered<T>>;
36343628 using base_t = T;
36353629 using table_t = typename FilteredBase<typename T::table_t >::table_t ;
3630+ using columns_t = typename T::columns_t ;
36363631
3637- using iterator = FilteredBase< typename T::table_t >::iterator ;
3638- using unfiltered_iterator = FilteredBase< typename T::table_t >::unfiltered_iterator ;
3632+ using iterator = typename T::template iterator_template_o<FilteredIndexPolicy, self_t > ;
3633+ using unfiltered_iterator = typename T::template iterator_template_o<DefaultIndexPolicy, self_t > ;
36393634 using const_iterator = iterator;
36403635
36413636 iterator begin ()
0 commit comments