Skip to content

Commit 8446a10

Browse files
committed
improve originals computation; fix for table version corner case
1 parent 3c6915f commit 8446a10

File tree

1 file changed

+20
-12
lines changed
  • Framework/Core/include/Framework

1 file changed

+20
-12
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <arrow/array.h>
2828
#include <arrow/util/config.h>
2929
#include <gandiva/selection_vector.h>
30+
#include <array>
3031
#include <cassert>
3132
#include <fmt/format.h>
3233
#include <gsl/span>
@@ -282,17 +283,17 @@ consteval auto filterForKey()
282283
};
283284

284285
/// Compile-time function to extract version from table signature string "DESC/#"
285-
static inline constexpr int version(const char* const str)
286+
static inline constexpr uint32_t version(const char* const str)
286287
{
287288
if (str[0] == '\0') {
288289
return 0;
289290
}
290291
size_t len = 0;
291-
int res = 0;
292-
while (len < 16 && str[len] != '/') {
292+
uint32_t res = 0;
293+
while (str[len] != '/' && str[len] != '\0') {
293294
++len;
294295
}
295-
if (len > 16) {
296+
if (str[len - 1] == '\0') {
296297
return -1;
297298
}
298299
for (auto i = len + 1; str[i] != '\0'; ++i) {
@@ -1656,6 +1657,20 @@ consteval auto getColumns()
16561657
return typename aod::MetadataTrait<o2::aod::Hash<ref.desc_hash>>::metadata::columns{};
16571658
}
16581659

1660+
template <TableRef ref, typename... Ts>
1661+
requires((sizeof...(Ts) == 0) || (o2::soa::is_column<Ts> && ...))
1662+
consteval auto computeOriginals()
1663+
{
1664+
return std::array<TableRef, 1>{ref};
1665+
}
1666+
1667+
template <TableRef ref, typename... Ts>
1668+
requires((sizeof...(Ts) > 0) && (!o2::soa::is_column<Ts> || ...))
1669+
consteval auto computeOriginals()
1670+
{
1671+
return o2::soa::mergeOriginals<Ts...>();
1672+
}
1673+
16591674
/// A Table class which observes an arrow::Table and provides
16601675
/// It is templated on a set of Column / DynamicColumn types.
16611676
template <aod::is_aod_hash L, aod::is_aod_hash D, aod::is_origin_hash O, typename... Ts>
@@ -1666,14 +1681,7 @@ class Table
16661681
using self_t = Table<L, D, O, Ts...>;
16671682
using table_t = self_t;
16681683

1669-
static constexpr const auto originals = framework::overloaded{
1670-
[]<typename... TTs>
1671-
requires((sizeof...(TTs) == 0) || (o2::soa::is_column<TTs> && ...))
1672-
(framework::pack<TTs...>) { return std::array<TableRef, 1>{ref}; },
1673-
[]<typename... TTs>
1674-
requires((sizeof...(TTs) > 0) && (!o2::soa::is_column<TTs> || ...))
1675-
(framework::pack<TTs...>) { return o2::soa::mergeOriginals<TTs...>(); }}
1676-
.operator()(framework::pack<Ts...>{});
1684+
static constexpr const auto originals = computeOriginals<ref, Ts...>();
16771685

16781686
template <size_t N, std::array<TableRef, N> bindings>
16791687
requires(ref.origin_hash == "CONC"_h)

0 commit comments

Comments
 (0)