The Gaudi Framework
master (e98cfcff)
Loading...
Searching...
No Matches
MergingTransformer.h
Go to the documentation of this file.
1
/***********************************************************************************\
2
* (c) Copyright 1998-2026 CERN for the benefit of the LHCb and ATLAS collaborations *
3
* *
4
* This software is distributed under the terms of the Apache version 2 licence, *
5
* copied verbatim in the file "LICENSE". *
6
* *
7
* In applying this licence, CERN does not waive the privileges and immunities *
8
* granted to it by virtue of its status as an Intergovernmental Organization *
9
* or submit itself to any jurisdiction. *
10
\***********************************************************************************/
11
#pragma once
12
#include "
details.h
"
13
#include "
utilities.h
"
14
#include <
Gaudi/Algorithm.h
>
15
#include <tuple>
16
17
namespace
Gaudi::Functional
{
18
19
namespace
details
{
20
21
template
<
typename
Sig>
22
constexpr
bool
is_void_fun_v
=
false
;
23
template
<
typename
... Args>
24
constexpr
bool
is_void_fun_v
<void( Args... )> =
true
;
25
template
<
typename
Sig>
26
concept
is_void_fun
=
is_void_fun_v<Sig>
;
27
28
template
<
typename
Signature,
typename
Traits_,
bool
isLegacy>
29
struct
MergingTransformer
;
30
32
template
<
typename
Out,
typename
... Args,
typename
Traits_>
33
requires
has_handle_vector_input
<Args...>
34
struct
MergingTransformer
<Out( const Args&... ), Traits_,
true
>
35
:
DataHandleVectorMixin
<
type_list
<Out>, Traits_, Args...> {
36
using
DataHandleVectorMixin
<
type_list<Out>
, Traits_, Args...>
::DataHandleVectorMixin
;
37
38
// derived classes can NOT implement execute
39
StatusCode
execute
() override final {
40
return
execute_single_output
( *
this
, this->getContext(), this->m_outputs );
41
}
42
43
virtual
Out
operator()
(
const
Args&... inputs )
const
= 0;
44
};
45
47
template
<
typename
Out,
typename
... Args,
typename
Traits_>
48
requires
has_handle_vector_input
<Args...>
49
struct
MergingTransformer
<Out( const Args&... ), Traits_,
false
>
50
:
DataHandleVectorMixin
<
type_list
<Out>, Traits_, Args...> {
51
using
DataHandleVectorMixin
<
type_list<Out>
, Traits_, Args...>
::DataHandleVectorMixin
;
52
53
// derived classes can NOT implement execute
54
StatusCode
execute
(
const
EventContext
& ctx )
const
override
final
{
55
return
execute_single_output
( *
this
, ctx, this->m_outputs );
56
}
57
58
virtual
Out
operator()
(
const
Args&... inputs )
const
= 0;
59
};
60
61
}
// namespace details
62
63
template
<
typename
Signature,
typename
Traits_ = Traits::useDefaults>
64
using
MergingTransformer
=
details::MergingTransformer<Signature, Traits_, details::isLegacy<Traits_>
>;
65
66
// more meaningful alias for cases where the return type in Signature is void
67
template
<details::is_
void
_fun Signature,
typename
Traits_ = Traits::useDefaults>
68
using
MergingConsumer
=
details::MergingTransformer<Signature, Traits_, details::isLegacy<Traits_>
>;
69
70
using
details::vector_of_const_
;
71
72
// Merging inputs -> N
73
template
<
typename
Signature,
typename
Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
74
struct
MergingMultiTransformer
;
75
76
template
<
typename
... Outs,
typename
... Args,
typename
Traits_>
77
requires
details::has_handle_vector_input
<Args...>
78
struct
MergingMultiTransformer
<
std
::tuple<Outs...>( const Args&... ), Traits_>
79
:
details::DataHandleVectorMixin
<details::type_list<Outs...>, Traits_, Args...> {
80
using
details::DataHandleVectorMixin
<
details::type_list
<Outs...>, Traits_, Args...>::DataHandleVectorMixin;
81
82
// derived classes can NOT implement execute
83
StatusCode
execute
(
EventContext
const
& ctx )
const
override
final
{
84
return
details::execute_outputs
( *
this
, ctx, this->m_outputs );
85
}
86
87
virtual
std::tuple<Outs...>
operator()
(
const
Args&... inputs )
const
= 0;
88
};
89
90
// Merging inputs -> N with filter functionality
91
template
<
typename
Signature,
typename
Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
92
struct
MergingMultiTransformerFilter
;
93
94
template
<
typename
... Outs,
typename
... Args,
typename
Traits_>
95
requires
details::has_handle_vector_input
<Args...>
96
struct
MergingMultiTransformerFilter
<
std
::tuple<Outs...>( const Args&... ), Traits_>
97
:
details::DataHandleVectorMixin
<details::type_list<Outs...>, Traits_, Args...> {
98
using
details::DataHandleVectorMixin
<
details::type_list
<Outs...>, Traits_, Args...>::DataHandleVectorMixin;
99
100
// derived classes can NOT implement execute
101
StatusCode
execute
(
EventContext
const
& ctx )
const
override
final
{
102
return
details::execute_filtered_outputs
( *
this
, ctx, this->m_outputs );
103
}
104
105
virtual
std::tuple<bool, Outs...>
operator()
(
const
Args&... inputs )
const
= 0;
106
};
107
108
}
// namespace Gaudi::Functional
Algorithm.h
EventContext
This class represents an entry point to all the event specific data.
Definition
EventContext.h:35
Gaudi::Functional::details::vector_of_const_
Definition
details.h:304
StatusCode
This class is used for returning status codes from appropriate routines.
Definition
StatusCode.h:64
Gaudi::Functional::details::has_handle_vector_input
Definition
details.h:444
Gaudi::Functional::details::is_void_fun
Definition
MergingTransformer.h:26
details.h
Gaudi::Functional::details
Definition
Consumer.h:17
Gaudi::Functional::details::execute_outputs
StatusCode execute_outputs(const Algorithm &algo, const EventContext &ctx, const OutHandles &out_handles)
Definition
details.h:966
Gaudi::Functional::details::is_void_fun_v
constexpr bool is_void_fun_v
Definition
MergingTransformer.h:22
Gaudi::Functional::details::execute_single_output
StatusCode execute_single_output(const Algorithm &algo, const EventContext &ctx, const OutHandles &out_handles={})
Definition
details.h:952
Gaudi::Functional::details::execute_filtered_outputs
StatusCode execute_filtered_outputs(const Algorithm &algo, const EventContext &ctx, const OutHandles &out_handles)
Definition
details.h:974
Gaudi::Functional::details::DataHandleVectorMixin
DataHandleMixin< Outputs, type_list< handle_vector_input_t< Args >... >, Traits_ > DataHandleVectorMixin
Definition
details.h:752
Gaudi::Functional
Definition
Consumer.h:15
Gaudi::Functional::MergingTransformer
details::MergingTransformer< Signature, Traits_, details::isLegacy< Traits_ > > MergingTransformer
Definition
MergingTransformer.h:64
Gaudi::Functional::MergingConsumer
details::MergingTransformer< Signature, Traits_, details::isLegacy< Traits_ > > MergingConsumer
Definition
MergingTransformer.h:68
std
STL namespace.
Gaudi::Functional::MergingMultiTransformerFilter
Definition
MergingTransformer.h:92
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(const Args &...), Traits_ >::execute
StatusCode execute(EventContext const &ctx) const override final
Definition
MergingTransformer.h:101
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(const Args &...), Traits_ >::operator()
virtual std::tuple< bool, Outs... > operator()(const Args &... inputs) const =0
Gaudi::Functional::MergingMultiTransformer
Definition
MergingTransformer.h:74
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(const Args &...), Traits_ >::execute
StatusCode execute(EventContext const &ctx) const override final
Definition
MergingTransformer.h:83
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(const Args &...), Traits_ >::operator()
virtual std::tuple< Outs... > operator()(const Args &... inputs) const =0
Gaudi::Functional::details::MergingTransformer
Definition
MergingTransformer.h:29
Gaudi::Functional::details::MergingTransformer< Out(const Args &...), Traits_, false >::execute
StatusCode execute(const EventContext &ctx) const override final
Definition
MergingTransformer.h:54
Gaudi::Functional::details::MergingTransformer< Out(const Args &...), Traits_, true >::execute
StatusCode execute() override final
Definition
MergingTransformer.h:39
Gaudi::Functional::details::MergingTransformer< Out(const Args &...), Traits_, false >::operator()
virtual Out operator()(const Args &... inputs) const =0
Gaudi::Functional::details::MergingTransformer< Out(const Args &...), Traits_, true >::operator()
virtual Out operator()(const Args &... inputs) const =0
Gaudi::Functional::details::type_list
Definition
details.h:447
utilities.h
GaudiFunctional
include
Gaudi
Functional
MergingTransformer.h
Generated on Wed Jun 3 2026 11:01:19 for The Gaudi Framework by
1.13.1