Skip to content

Commit cfa88fd

Browse files
committed
improve metadata handling concepts
1 parent 4c78ee9 commit cfa88fd

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,20 @@ inline constexpr bool is_type_with_originals_v<T, std::void_t<decltype(sizeof(ty
208208
template <typename T>
209209
concept has_parent_t = not_void<typename T::parent_t>;
210210

211+
template <typename INHERIT>
212+
class TableMetadata;
213+
214+
template <typename T>
215+
concept is_metadata = framework::base_of_template<TableMetadata, T>;
216+
217+
template <typename T>
218+
concept is_metadata_trait = framework::specialization_of_template<aod::MetadataTrait, T>;
219+
220+
template <typename T>
221+
concept has_metadata = is_metadata_trait<T> && not_void<typename T::metadata>;
222+
211223
template <typename T>
212-
concept has_metadata = not_void<typename T::metadata>;
224+
concept has_sources = is_metadata_trait<T> && not_void<typename T::sources>;
213225

214226
template <typename T>
215227
concept is_spawnable_column = std::is_same_v<typename T::spawnable_t, std::true_type>;
@@ -1910,9 +1922,6 @@ class TableMetadata
19101922
static std::string sourceSpec() { return fmt::format("{}/{:s}/{}/{}", INHERIT::mLabel, INHERIT::table_t::mOrigin, INHERIT::mDescription, INHERIT::mVersion); };
19111923
};
19121924

1913-
template <typename T>
1914-
concept is_metadata = framework::is_base_of_template_v<TableMetadata, T>;
1915-
19161925
/// Helper templates to define universal join and concat
19171926
template <o2::framework::OriginEnc ORIGIN, typename... T>
19181927
constexpr auto join(T const&... t)

Framework/Core/include/Framework/AnalysisTask.h

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,20 +82,15 @@ struct AnalysisDataProcessorBuilder {
8282
return std::vector{getSpec<T>()...};
8383
}
8484

85-
template <soa::is_index_table T>
86-
static inline auto getSources()
87-
{
88-
return getInputSpecs(typename T::sources_t{});
89-
}
90-
9185
template <typename T>
86+
requires soa::has_sources<typename o2::aod::MetadataTrait<std::decay_t<T>>::metadata>
9287
static inline auto getSources()
93-
requires soa::with_base_table<std::decay_t<T>>
9488
{
95-
return getInputSpecs(typename aod::MetadataTrait<T>::metadata::sources{});
89+
return getInputSpecs(typename aod::MetadataTrait<std::decay_t<T>>::metadata::sources{});
9690
}
9791

9892
template <typename T>
93+
requires soa::has_sources<typename o2::aod::MetadataTrait<std::decay_t<T>>::metadata>
9994
static auto getInputMetadata()
10095
{
10196
std::vector<ConfigParamSpec> inputMetadata;
@@ -133,7 +128,7 @@ struct AnalysisDataProcessorBuilder {
133128
using metadata = typename aod::MetadataTrait<std::decay_t<O>>::metadata;
134129
std::vector<ConfigParamSpec> inputMetadata;
135130
inputMetadata.emplace_back(ConfigParamSpec{std::string{"control:"} + name, VariantType::Bool, value, {"\"\""}});
136-
if constexpr (soa::is_index_table<std::decay_t<O>> || soa::with_base_table<std::decay_t<O>>) {
131+
if constexpr (soa::has_sources<typename aod::MetadataTrait<std::decay_t<O>>::metadata>) {
137132
auto inputSources = getInputMetadata<std::decay_t<O>>();
138133
inputMetadata.insert(inputMetadata.end(), inputSources.begin(), inputSources.end());
139134
}

0 commit comments

Comments
 (0)