Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions Framework/Core/include/Framework/TableBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -753,11 +753,12 @@ auto makeEmptyTable()
return b.finalize();
}

template <typename... Cs>
auto makeEmptyTable(const char* name, framework::pack<Cs...> p)

template <PackLike P>
auto makeEmptyTable(const char* name)
{
TableBuilder b;
[[maybe_unused]] auto writer = b.cursor(p);
[[maybe_unused]] auto writer = b.cursor(P{});
b.setLabel(name);
return b.finalize();
}
Expand All @@ -772,7 +773,7 @@ auto spawner(std::shared_ptr<arrow::Table> const& fullTable, const char* name, o
{
using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t;
if (fullTable->num_rows() == 0) {
return makeEmptyTable(name, placeholders_pack_t{});
return makeEmptyTable<placeholders_pack_t>(name);
}
return spawnerHelper(fullTable, schema, framework::pack_size(placeholders_pack_t{}), projectors, name, projector);
}
Expand All @@ -791,7 +792,7 @@ auto spawner(std::shared_ptr<arrow::Table> const& fullTable, const char* name, e
{
using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t;
if (fullTable->num_rows() == 0) {
return makeEmptyTable(name, expression_pack_t{});
return makeEmptyTable<expression_pack_t>(name);
}
return spawnerHelper(fullTable, schema, framework::pack_size(expression_pack_t{}), projectors, name, projector);
}
Expand All @@ -805,12 +806,12 @@ auto spawner(std::vector<std::shared_ptr<arrow::Table>>&& tables, const char* na
}

template <typename... C>
auto spawner(framework::pack<C...>, std::vector<std::shared_ptr<arrow::Table>>&& tables, const char* name, expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const& schema)
auto spawner(framework::pack<C...> columns, std::vector<std::shared_ptr<arrow::Table>>&& tables, const char* name, expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const& schema)
{
std::array<const char*, 1> labels{"original"};
auto fullTable = soa::ArrowHelpers::joinTables(std::move(tables), std::span<const char* const>{labels});
if (fullTable->num_rows() == 0) {
return makeEmptyTable(name, framework::pack<C...>{});
return makeEmptyTable<decltype(columns)>(name);
}
return spawnerHelper(fullTable, schema, sizeof...(C), projectors, name, projector);
}
Expand Down
3 changes: 3 additions & 0 deletions Framework/Foundation/include/Framework/Pack.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ constexpr std::size_t pack_size(pack<Ts...> const&)
return sizeof...(Ts);
}

template <typename P>
concept PackLike = requires (P &p) { o2::framework::pack_size(p); };

template <std::size_t I, typename T>
struct pack_element;

Expand Down
Loading