Skip to content

Commit 020c84d

Browse files
committed
replace has_process with tuple size check
1 parent 9cb0223 commit 020c84d

2 files changed

Lines changed: 17 additions & 32 deletions

File tree

Analysis/Tutorials/src/histogramsFullTracks.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ struct etaAndClsHistograms {
3232
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
3333
{
3434
return WorkflowSpec{
35-
adaptAnalysisTask<etaAndClsHistograms>(cfgc, Processes{&etaAndClsHistograms::process}),
35+
adaptAnalysisTask<etaAndClsHistograms>(cfgc),
3636
};
3737
}

Framework/Core/include/Framework/AnalysisTask.h

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -616,30 +616,6 @@ struct Processes {
616616
std::tuple<Ts...> processes;
617617
};
618618

619-
template <typename T>
620-
std::tuple<std::string, std::shared_ptr<T>> getNameAndTask()
621-
{
622-
auto type_name_str = type_name<T>();
623-
std::string name = type_to_task_name(type_name_str);
624-
auto task = std::make_shared<T>();
625-
return std::make_tuple(name, task);
626-
}
627-
628-
template <typename T, typename T2, typename... Args>
629-
std::tuple<std::string, std::shared_ptr<T>> getNameAndTask(T2&& firstArg, Args&&... args)
630-
{
631-
if constexpr (std::is_same_v<typename std::decay<T2>::type, TaskName>) {
632-
std::string name = firstArg.value;
633-
auto task = std::make_shared<T>(std::forward<Args>(args)...);
634-
return std::make_tuple(name, task);
635-
} else {
636-
auto type_name_str = type_name<T>();
637-
std::string name = type_to_task_name(type_name_str);
638-
auto task = std::make_shared<T>(std::forward<T2, Args>(firstArg, args)...);
639-
return std::make_tuple(name, task);
640-
}
641-
}
642-
643619
template <typename T, typename... S, typename... A>
644620
auto getNameTaskProcesses(TaskName first, Processes<S...> second, A... args)
645621
{
@@ -658,7 +634,11 @@ template <typename T, typename... A>
658634
auto getNameTaskProcesses(TaskName first, A... args)
659635
{
660636
auto task = std::make_shared<T>(std::forward<A>(args)...);
661-
return std::make_tuple(first.value, task, std::make_tuple(&T::process));
637+
if constexpr (has_process_v<T>) {
638+
return std::make_tuple(first.value, task, std::make_tuple(&T::process));
639+
} else {
640+
return std::make_tuple(first.value, task, std::make_tuple());
641+
}
662642
}
663643

664644
template <typename T, typename... S, typename... A>
@@ -673,9 +653,14 @@ auto getNameTaskProcesses(Processes<S...> first, A... args)
673653
template <typename T>
674654
auto getNameTaskProcesses()
675655
{
676-
std::string name = type_to_task_name(type_name<T>());
656+
auto type_name_str = type_name<T>();
657+
std::string name = type_to_task_name(type_name_str);
677658
auto task = std::make_shared<T>();
678-
return std::make_tuple(name, task, std::make_tuple(&T::process));
659+
if constexpr (has_process_v<T>) {
660+
return std::make_tuple(name, task, std::make_tuple(&T::process));
661+
} else {
662+
return std::make_tuple(name, task, std::make_tuple());
663+
}
679664
}
680665

681666
/// Adaptor to make an AlgorithmSpec from a o2::framework::Task
@@ -699,7 +684,7 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
699684
std::vector<ConfigParamSpec> options;
700685

701686
auto tupledTask = o2::framework::to_tuple_refs(*task.get());
702-
static_assert(has_process_v<T> || has_run_v<T> || has_init_v<T>,
687+
static_assert(std::tuple_size_v<std::decay_t<decltype(processTuple)>> > 0 || has_run_v<T> || has_init_v<T>,
703688
"At least one of process(...), T::run(...), init(...) must be defined");
704689

705690
std::vector<InputSpec> inputs;
@@ -708,7 +693,7 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
708693
/// make sure options and configurables are set before expression infos are created
709694
std::apply([&options, &hash](auto&... x) { return (OptionManager<std::decay_t<decltype(x)>>::appendOption(options, x), ...); }, tupledTask);
710695

711-
if constexpr (has_process_v<T>) {
696+
if constexpr ((std::tuple_size_v<std::decay_t<decltype(processTuple)>>) > 0) {
712697
// this pushes (I,schemaPtr,nullptr) into expressionInfos for arguments that are Filtered/filtered_iterators
713698
AnalysisDataProcessorBuilder::inputsFromArgsTuple(processTuple, inputs, expressionInfos);
714699
}
@@ -739,7 +724,7 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
739724
};
740725
callbacks.set(CallbackService::Id::EndOfStream, endofdatacb);
741726

742-
if constexpr (has_process_v<T>) {
727+
if constexpr ((std::tuple_size_v<std::decay_t<decltype(processTuple)>>) > 0) {
743728
/// update configurables in filters
744729
std::apply(
745730
[&ic](auto&... x) { return (FilterManager<std::decay_t<decltype(x)>>::updatePlaceholders(x, ic), ...); },
@@ -765,7 +750,7 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
765750
if constexpr (has_run_v<T>) {
766751
task->run(pc);
767752
}
768-
if constexpr (has_process_v<T>) {
753+
if constexpr ((std::tuple_size_v<std::decay_t<decltype(processTuple)>>) > 0) {
769754
AnalysisDataProcessorBuilder::invokeProcessTuple(*(task.get()), pc.inputs(), processTuple, expressionInfos);
770755
}
771756
std::apply([&pc](auto&&... x) { return (OutputManager<std::decay_t<decltype(x)>>::finalize(pc, x), ...); }, tupledTask);

0 commit comments

Comments
 (0)