Skip to content

Commit 4e3732b

Browse files
committed
get rid of bindings_pack_t
1 parent be7018a commit 4e3732b

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
@@ -1045,16 +1045,19 @@ consteval auto getBinding() -> void
10451045
{
10461046
}
10471047

1048+
template <typename T, typename... Cs>
1049+
consteval auto inBindings(framework::pack<Cs...>)
1050+
{
1051+
return framework::has_type_at_v<T>(framework::pack<decltype(getBinding<Cs>())...>{});
1052+
}
1053+
10481054
template <typename D, typename O, typename IP, typename... C>
10491055
struct TableIterator : IP, C... {
10501056
public:
10511057
using self_t = TableIterator<D, O, IP, C...>;
10521058
using policy_t = IP;
10531059
using all_columns = framework::pack<C...>;
10541060
using persistent_columns_t = framework::selected_pack<soa::is_persistent_column_t, C...>;
1055-
using bindings_pack_t = decltype([]<typename... Cs>(framework::pack<Cs...>) {
1056-
return framework::pack<decltype(getBinding<Cs>())...>{};
1057-
}(all_columns{}));
10581061

10591062
TableIterator(arrow::ChunkedArray* columnData[sizeof...(C)], IP&& policy)
10601063
: IP{policy},
@@ -1828,8 +1831,6 @@ class Table
18281831
template <typename IP, typename Parent, typename... T>
18291832
struct TableIteratorBase : base_iterator<IP> {
18301833
using columns_t = typename Parent::columns_t;
1831-
using bindings_pack_t = typename base_iterator<IP>::bindings_pack_t;
1832-
// static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
18331834
static constexpr auto originals = Parent::originals;
18341835
using policy_t = IP;
18351836
using parent_t = Parent;
@@ -1918,17 +1919,21 @@ class Table
19181919
template <typename TI>
19191920
auto getId() const
19201921
{
1921-
using decayed = std::decay_t<TI>;
1922-
if constexpr (framework::has_type<decayed>(bindings_pack_t{})) { // index to another table
1923-
constexpr auto idx = framework::has_type_at_v<decayed>(bindings_pack_t{});
1924-
return framework::pack_element_t<idx, columns_t>::getId();
1925-
} else if constexpr (std::same_as<decayed, Parent>) { // self index
1926-
return this->globalIndex();
1927-
} else if constexpr (is_indexing_column<decayed>) { // soa::Index<>
1928-
return this->globalIndex();
1929-
} else {
1930-
return static_cast<int32_t>(-1);
1931-
}
1922+
return static_cast<int32_t>(-1);
1923+
}
1924+
1925+
template <typename TI>
1926+
requires(std::same_as<std::decay_t<TI>, Parent> || is_indexing_column<std::decay_t<TI>>)
1927+
auto getId() const
1928+
{
1929+
return this->globalIndex();
1930+
}
1931+
1932+
template <typename TI>
1933+
requires(inBindings<std::decay_t<TI>>(typename Parent::all_columns{}) < framework::pack_size(typename Parent::all_columns{}))
1934+
auto getId() const
1935+
{
1936+
return inBindings<std::decay_t<TI>>(typename Parent::all_columns{});
19321937
}
19331938

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

0 commit comments

Comments
 (0)