Skip to content

Commit 30654a8

Browse files
committed
get rid of bindings_pack_t
1 parent 0be02f3 commit 30654a8

File tree

1 file changed

+21
-16
lines changed
  • Framework/Core/include/Framework

1 file changed

+21
-16
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,16 +1042,19 @@ consteval auto getBinding() -> void
10421042
{
10431043
}
10441044

1045+
template <typename T, typename... Cs>
1046+
consteval auto inBindings(framework::pack<Cs...>)
1047+
{
1048+
return framework::has_type_at_v<T>(framework::pack<decltype(getBinding<Cs>())...>{});
1049+
}
1050+
10451051
template <typename D, typename O, typename IP, typename... C>
10461052
struct TableIterator : IP, C... {
10471053
public:
10481054
using self_t = TableIterator<D, O, IP, C...>;
10491055
using policy_t = IP;
10501056
using all_columns = framework::pack<C...>;
10511057
using persistent_columns_t = framework::selected_pack<soa::is_persistent_column_t, C...>;
1052-
using bindings_pack_t = decltype([]<typename... Cs>(framework::pack<Cs...>) {
1053-
return framework::pack<decltype(getBinding<Cs>())...>{};
1054-
}(all_columns{}));
10551058

10561059
TableIterator(arrow::ChunkedArray* columnData[sizeof...(C)], IP&& policy)
10571060
: IP{policy},
@@ -1825,8 +1828,6 @@ class Table
18251828
template <typename IP, typename Parent, typename... T>
18261829
struct TableIteratorBase : base_iterator<IP> {
18271830
using columns_t = typename Parent::columns_t;
1828-
using bindings_pack_t = typename base_iterator<IP>::bindings_pack_t;
1829-
// static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
18301831
static constexpr auto originals = Parent::originals;
18311832
using policy_t = IP;
18321833
using parent_t = Parent;
@@ -1915,17 +1916,21 @@ class Table
19151916
template <typename TI>
19161917
auto getId() const
19171918
{
1918-
using decayed = std::decay_t<TI>;
1919-
if constexpr (framework::has_type<decayed>(bindings_pack_t{})) { // index to another table
1920-
constexpr auto idx = framework::has_type_at_v<decayed>(bindings_pack_t{});
1921-
return framework::pack_element_t<idx, columns_t>::getId();
1922-
} else if constexpr (std::same_as<decayed, Parent>) { // self index
1923-
return this->globalIndex();
1924-
} else if constexpr (is_indexing_column<decayed>) { // soa::Index<>
1925-
return this->globalIndex();
1926-
} else {
1927-
return static_cast<int32_t>(-1);
1928-
}
1919+
return static_cast<int32_t>(-1);
1920+
}
1921+
1922+
template <typename TI>
1923+
requires(std::same_as<std::decay_t<TI>, Parent> || is_indexing_column<std::decay_t<TI>>)
1924+
auto getId() const
1925+
{
1926+
return this->globalIndex();
1927+
}
1928+
1929+
template <typename TI>
1930+
requires(inBindings<std::decay_t<TI>>(typename Parent::all_columns{}) < framework::pack_size(typename Parent::all_columns{}))
1931+
auto getId() const
1932+
{
1933+
return inBindings<std::decay_t<TI>>(typename Parent::all_columns{});
19291934
}
19301935

19311936
template <soa::is_dynamic_column CD, typename... CDArgs>

0 commit comments

Comments
 (0)