Skip to content

Commit a81daa3

Browse files
committed
start
1 parent 6fb94f9 commit a81daa3

2 files changed

Lines changed: 34 additions & 14 deletions

File tree

Framework/Core/include/Framework/ASoA.h

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,11 +1663,6 @@ auto select(T const& t, framework::expressions::Filter const& f)
16631663

16641664
arrow::ChunkedArray* getIndexFromLabel(arrow::Table* table, std::string_view label);
16651665

1666-
template <typename D, typename O, typename IP, typename... C>
1667-
consteval auto base_iter(framework::pack<C...>&&) -> TableIterator<D, O, IP, C...>
1668-
{
1669-
}
1670-
16711666
template <TableRef ref, typename... Ts>
16721667
requires((sizeof...(Ts) > 0) && (soa::is_column<Ts> && ...))
16731668
consteval auto getColumns()
@@ -1726,7 +1721,7 @@ class Table
17261721
static constexpr const auto originalLabels = []<size_t N, std::array<TableRef, N> refs, size_t... Is>(std::index_sequence<Is...>) {
17271722
return std::array<const char*, N>{o2::aod::label<refs[Is]>()...};
17281723
}.template operator()<originals.size(), originals>(std::make_index_sequence<originals.size()>());
1729-
static constexpr const uint32_t binding_origin = originals[0].origin_hash; // commonOrigin<originals.size(), originals>();
1724+
static constexpr const uint32_t binding_origin = originals[0].origin_hash;
17301725
static constexpr header::DataOrigin binding_origin_ = o2::aod::Hash<binding_origin>::origin;
17311726

17321727
template <size_t N, std::array<TableRef, N> bindings>
@@ -1767,14 +1762,13 @@ class Table
17671762
using external_index_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_external_index_t, C...> {}(columns_t{}));
17681763
using internal_index_columns_t = decltype([]<typename... C>(framework::pack<C...>&&) -> framework::selected_pack<soa::is_self_index_t, C...> {}(columns_t{}));
17691764
template <typename IP>
1770-
using base_iterator = decltype(base_iter<D, O, IP>(columns_t{}));
1765+
using base_iterator = decltype([]<typename... Cs>(framework::pack<Cs...>&&) -> TableIterator<D, O, IP, Cs...> {}(columns_t{}));
17711766

17721767
template <typename IP, typename Parent, typename... T>
17731768
struct TableIteratorBase : base_iterator<IP> {
17741769
using columns_t = typename Parent::columns_t;
17751770
using external_index_columns_t = typename Parent::external_index_columns_t;
17761771
using bindings_pack_t = decltype([]<typename... C>(framework::pack<C...>) -> framework::pack<typename C::binding_t...> {}(external_index_columns_t{}));
1777-
// static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
17781772
static constexpr auto originals = Parent::originals;
17791773
using policy_t = IP;
17801774
using parent_t = Parent;
@@ -1926,8 +1920,7 @@ class Table
19261920
using iterator_template = TableIteratorBase<IP, Parent, T...>;
19271921

19281922
template <typename IP, typename Parent>
1929-
static consteval auto full_iter()
1930-
{
1923+
using iterator_template_o = decltype([](){
19311924
if constexpr (sizeof...(Ts) == 0) {
19321925
return iterator_template<IP, Parent>{};
19331926
} else {
@@ -1937,10 +1930,7 @@ class Table
19371930
return iterator_template<IP, Parent, Ts...>{};
19381931
}
19391932
}
1940-
}
1941-
1942-
template <typename IP, typename Parent>
1943-
using iterator_template_o = decltype(full_iter<IP, Parent>());
1933+
}());
19441934

19451935
using iterator = iterator_template_o<DefaultIndexPolicy, table_t>;
19461936
using filtered_iterator = iterator_template_o<FilteredIndexPolicy, table_t>;
@@ -1954,6 +1944,26 @@ class Table
19541944
return []<typename... C>(framework::pack<C...>) { return std::set{{C::hash...}}; }(columns_t{});
19551945
}
19561946

1947+
Table(o2::soa::ArrowTableRef tableRef)
1948+
: mTable(tableRef.tablePtr),
1949+
mOffset(tableRef.offset),
1950+
mEnd{tableRef.size}
1951+
{
1952+
if (mTable->num_rows() == 0) {
1953+
for (size_t ci = 0; ci < framework::pack_size(columns_t{}); ++ci) {
1954+
mColumnChunks[ci] = nullptr;
1955+
}
1956+
mBegin = mEnd;
1957+
} else {
1958+
auto lookups = [this]<typename... C>(framework::pack<C...>) -> std::array<arrow::ChunkedArray*, framework::pack_size(columns_t{})> { return {lookupColumn<C>()...}; }(columns_t{});
1959+
for (size_t ci = 0; ci < framework::pack_size(columns_t{}); ++ci) {
1960+
mColumnChunks[ci] = lookups[ci];
1961+
}
1962+
mBegin = unfiltered_iterator{mColumnChunks, {mEnd.index, mOffset}};
1963+
mBegin.bindInternalIndices(this);
1964+
}
1965+
}
1966+
19571967
Table(std::shared_ptr<arrow::Table> table, uint64_t offset = 0)
19581968
: mTable(table),
19591969
mOffset(offset),

Framework/Core/include/Framework/ArrowTypes.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@
1717

1818
namespace o2::soa
1919
{
20+
struct ArrowRange {
21+
uint64_t offset;
22+
int64_t size;
23+
};
24+
25+
struct ArrowTableRef {
26+
std::shared_ptr<arrow::Table> tablePtr;
27+
ArrowRange range;
28+
};
29+
2030
template <typename T>
2131
struct arrow_array_for {
2232
};

0 commit comments

Comments
 (0)