11 #ifndef MERGING_TRANSFORMER_H 12 #define MERGING_TRANSFORMER_H 25 using details::vector_of_const_;
29 template <
typename Signature,
typename Traits_,
bool isLegacy>
33 template <
typename Out,
typename In,
typename Traits_>
40 using KeyValue =
typename base_class::KeyValue;
45 , m_inputLocations{
this, inputs.first, inputs.second,
49 if ( std::is_pointer_v<In> ) {
53 [](
auto& h ) { h.setOptional(
true ); } );
64 vector_of_const_<In> ins;
65 ins.reserve( m_inputs.size() );
68 put( std::get<0>( this->m_outputs ), std::as_const( *
this )( std::as_const( ins ) ) );
76 virtual Out operator()(
const vector_of_const_<In>& inputs )
const = 0;
88 template <
typename Out,
typename In,
typename Traits_>
95 using KeyValue =
typename base_class::KeyValue;
100 , m_inputLocations{
this, inputs.first, inputs.second,
104 if ( std::is_pointer_v<In> ) {
108 [](
auto& h ) { h.setOptional(
true ); } );
119 vector_of_const_<In> ins;
120 ins.reserve( m_inputs.size() );
123 put( std::get<0>( this->m_outputs ), ( *
this )( std::as_const( ins ) ) );
131 virtual Out operator()(
const vector_of_const_<In>& inputs )
const = 0;
135 template <
typename T>
145 template <
typename Signature,
typename Traits_ = Traits::useDefaults>
149 template <
typename Signature,
typename Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
152 template <
typename... Outs,
typename In,
typename Traits_>
154 : details::DataHandleMixin<std::tuple<Outs...>, std::tuple<>, Traits_> {
173 vector_of_const_<In> ins;
174 ins.reserve( m_inputs.size() );
176 details::details2::get_from_handle<In>{} );
179 [&](
auto&... outhandle ) {
182 [&outhandle...](
auto&&... data ) {
183 ( details::put( outhandle, std::forward<decltype( data )>( data ) ), ... );
185 std::as_const( *
this )( std::as_const( ins ) ) );
196 virtual std::tuple<Outs...> operator()(
const vector_of_const_<In>& inputs )
const = 0;
200 template <
typename T>
208 template <
typename... Outs,
typename In,
typename Traits_>
211 : base_class(
name, pSvcLocator, outputs )
213 this, inputs.first, inputs.second,
216 if ( std::is_pointer_v<In> ) {
219 std::for_each( this->m_inputs.begin(), this->m_inputs.end(), [](
auto& h ) { h.setOptional(
true ); } );
Out1 * put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Define general base for Gaudi exception.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Implementation of property with value of concrete type.
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
Gaudi::tagged_bool< class ImmediatelyInvokeHandler_tag > ImmediatelyInvokeHandler
virtual const std::string & message() const
error message to be printed
This class represents an entry point to all the event specific data.
This class is used for returning status codes from appropriate routines.
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
virtual const StatusCode & code() const
StatusCode for Exception.
T back_inserter(T... args)
Handles make_vector_of_handles(IDataHandleHolder *owner, const std::vector< std::string > &init)
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.