Skip to content

Commit d16c8a9

Browse files
committed
Attempt at reducing makeEmptyTable bloat
1 parent a5bb3b4 commit d16c8a9

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

Framework/Core/include/Framework/TableBuilder.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -753,11 +753,12 @@ auto makeEmptyTable()
753753
return b.finalize();
754754
}
755755

756-
template <typename... Cs>
757-
auto makeEmptyTable(const char* name, framework::pack<Cs...> p)
756+
757+
template <PackLike P>
758+
auto makeEmptyTable(const char* name)
758759
{
759760
TableBuilder b;
760-
[[maybe_unused]] auto writer = b.cursor(p);
761+
[[maybe_unused]] auto writer = b.cursor(P{});
761762
b.setLabel(name);
762763
return b.finalize();
763764
}
@@ -772,7 +773,7 @@ auto spawner(std::shared_ptr<arrow::Table> const& fullTable, const char* name, o
772773
{
773774
using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t;
774775
if (fullTable->num_rows() == 0) {
775-
return makeEmptyTable(name, placeholders_pack_t{});
776+
return makeEmptyTable<placeholders_pack_t>(name);
776777
}
777778
return spawnerHelper(fullTable, schema, framework::pack_size(placeholders_pack_t{}), projectors, name, projector);
778779
}
@@ -791,7 +792,7 @@ auto spawner(std::shared_ptr<arrow::Table> const& fullTable, const char* name, e
791792
{
792793
using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t;
793794
if (fullTable->num_rows() == 0) {
794-
return makeEmptyTable(name, expression_pack_t{});
795+
return makeEmptyTable<expression_pack_t>(name);
795796
}
796797
return spawnerHelper(fullTable, schema, framework::pack_size(expression_pack_t{}), projectors, name, projector);
797798
}
@@ -805,12 +806,12 @@ auto spawner(std::vector<std::shared_ptr<arrow::Table>>&& tables, const char* na
805806
}
806807

807808
template <typename... C>
808-
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)
809+
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)
809810
{
810811
std::array<const char*, 1> labels{"original"};
811812
auto fullTable = soa::ArrowHelpers::joinTables(std::move(tables), std::span<const char* const>{labels});
812813
if (fullTable->num_rows() == 0) {
813-
return makeEmptyTable(name, framework::pack<C...>{});
814+
return makeEmptyTable<decltype(columns)>(name);
814815
}
815816
return spawnerHelper(fullTable, schema, sizeof...(C), projectors, name, projector);
816817
}

Framework/Foundation/include/Framework/Pack.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ constexpr std::size_t pack_size(pack<Ts...> const&)
3030
return sizeof...(Ts);
3131
}
3232

33+
template <typename P>
34+
concept PackLike = requires (P &p) { o2::framework::pack_size(p); };
35+
3336
template <std::size_t I, typename T>
3437
struct pack_element;
3538

0 commit comments

Comments
 (0)