Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v36r1 (3e2fb5a8)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MergingTransformer.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 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 #ifndef MERGING_TRANSFORMER_H
12 #define MERGING_TRANSFORMER_H
13 
14 #include <functional>
15 #include <string>
16 #include <vector>
17 
18 #include "Gaudi/Algorithm.h"
22 
23 namespace Gaudi::Functional {
24 
25  using details::vector_of_const_;
26 
27  namespace details {
28 
29  template <typename Sig>
31  template <typename... Args>
32  struct is_void_fun<void( Args... )> : std::true_type {};
33  template <typename Sig>
34  inline constexpr bool is_void_fun_v = is_void_fun<Sig>::value;
35 
36  template <typename Signature, typename Traits_, bool isLegacy>
38 
40  template <typename Out, typename In, typename Traits_>
41  struct MergingTransformer<Out( const vector_of_const_<In>& ), Traits_, true>
43  private:
45 
46  public:
47  using KeyValue = typename base_class::KeyValue;
48  using KeyValues = typename base_class::KeyValues;
49 
51  : base_class( std::move( name ), locator )
52  , m_inputLocations{this, inputs.first, inputs.second,
54  this->m_inputs =
55  make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
56  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
57  // optional flag... so do it
58  // explicitly here...
59  std::for_each( this->m_inputs.begin(), this->m_inputs.end(),
60  []( auto& h ) { h.setOptional( true ); } );
61  }
62  },
64  static_assert( std::is_void_v<Out> );
65  }
66 
68  : base_class( std::move( name ), locator, output )
69  , m_inputLocations{this, inputs.first, inputs.second,
71  this->m_inputs =
72  make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
73  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
74  // optional flag... so do it
75  // explicitly here...
76  std::for_each( this->m_inputs.begin(), this->m_inputs.end(),
77  []( auto& h ) { h.setOptional( true ); } );
78  }
79  },
81  static_assert( !std::is_void_v<Out> );
82  }
83 
84  // accessor to input Locations
85  const std::string& inputLocation( unsigned int n ) const { return m_inputLocations.value()[n]; }
86  unsigned int inputLocationSize() const { return m_inputLocations.value().size(); }
87 
88  // derived classes can NOT implement execute
89  StatusCode execute() override final {
91  ins.reserve( m_inputs.size() );
92  std::transform( m_inputs.begin(), m_inputs.end(), std::back_inserter( ins ), details2::get_from_handle<In>{} );
93  try {
94  if constexpr ( std::is_void_v<Out> ) {
95  std::as_const ( *this )( std::as_const( ins ) );
96  } else {
97  put( std::get<0>( this->m_outputs ), std::as_const( *this )( std::as_const( ins ) ) );
98  }
100  } catch ( GaudiException& e ) {
101  ( e.code() ? this->warning() : this->error() ) << e.message() << endmsg;
102  return e.code();
103  }
104  }
105 
106  virtual Out operator()( const vector_of_const_<In>& inputs ) const = 0;
107 
108  private:
109  // if In is a pointer, it signals optional (as opposed to mandatory) input
110  template <typename T>
112  std::vector<InputHandle_t<In>> m_inputs; // and make the handles properties instead...
113  Gaudi::Property<std::vector<std::string>> m_inputLocations; // TODO/FIXME: remove this duplication...
114  // TODO/FIXME: replace vector of string property + call-back with a
115  // vector<handle> property ... as soon as declareProperty can deal with that.
116  };
117 
118  template <typename Out, typename In, typename Traits_>
119  struct MergingTransformer<Out( const vector_of_const_<In>& ), Traits_, false>
121  private:
123 
124  public:
125  using KeyValue = typename base_class::KeyValue;
126  using KeyValues = typename base_class::KeyValues;
127 
129  : base_class( std::move( name ), locator )
130  , m_inputLocations{this, inputs.first, inputs.second,
132  this->m_inputs =
133  make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
134  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
135  // optional flag... so do it
136  // explicitly here...
137  std::for_each( this->m_inputs.begin(), this->m_inputs.end(),
138  []( auto& h ) { h.setOptional( true ); } );
139  }
140  },
142  static_assert( std::is_void_v<Out> );
143  }
144 
146  : base_class( std::move( name ), locator, output )
147  , m_inputLocations{this, inputs.first, inputs.second,
149  this->m_inputs =
150  make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
151  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
152  // optional flag... so do it
153  // explicitly here...
154  std::for_each( this->m_inputs.begin(), this->m_inputs.end(),
155  []( auto& h ) { h.setOptional( true ); } );
156  }
157  },
159  static_assert( !std::is_void_v<Out> );
160  }
161 
162  // accessor to input Locations
163  const std::string& inputLocation( unsigned int n ) const { return m_inputLocations.value()[n]; }
164  unsigned int inputLocationSize() const { return m_inputLocations.value().size(); }
165 
166  // derived classes can NOT implement execute
167  StatusCode execute( const EventContext& ) const override final {
169  ins.reserve( m_inputs.size() );
170  std::transform( m_inputs.begin(), m_inputs.end(), std::back_inserter( ins ), details2::get_from_handle<In>{} );
171  try {
172  if constexpr ( std::is_void_v<Out> ) {
173  ( *this )( std::as_const( ins ) );
174  } else {
175  put( std::get<0>( this->m_outputs ), ( *this )( std::as_const( ins ) ) );
176  }
177  return FilterDecision::PASSED;
178  } catch ( GaudiException& e ) {
179  ( e.code() ? this->warning() : this->error() ) << e.message() << endmsg;
180  return e.code();
181  }
182  }
183 
184  virtual Out operator()( const vector_of_const_<In>& inputs ) const = 0;
185 
186  private:
187  // if In is a pointer, it signals optional (as opposed to mandatory) input
188  template <typename T>
190  std::vector<InputHandle_t<In>> m_inputs; // and make the handles properties instead...
191  Gaudi::Property<std::vector<std::string>> m_inputLocations; // TODO/FIXME: remove this duplication...
192  // TODO/FIXME: replace vector of string property + call-back with a
193  // vector<handle> property ... as soon as declareProperty can deal with that.
194  };
195 
196  } // namespace details
197 
198  template <typename Signature, typename Traits_ = Traits::useDefaults>
200 
201  // more meaningful alias for cases where the return type in Signature is void
202  template <typename Signature, typename Traits_ = Traits::useDefaults,
203  typename = std::enable_if_t<details::is_void_fun_v<Signature>>>
205 
206  // Many of the same -> N
207  template <typename Signature, typename Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
209 
210  template <typename... Outs, typename In, typename Traits_>
211  struct MergingMultiTransformer<std::tuple<Outs...>( vector_of_const_<In> const& ), Traits_>
212  : details::DataHandleMixin<std::tuple<Outs...>, std::tuple<>, Traits_> {
213 
214  private:
216 
217  public:
218  using KeyValue = typename base_class::KeyValue;
219  using KeyValues = typename base_class::KeyValues;
220  using OutKeys = std::array<KeyValue, sizeof...( Outs )>;
221 
223  OutKeys const& outputs );
224 
225  // accessor to input Locations
226  std::string const& inputLocation( unsigned int n ) const { return m_inputLocations.value()[n]; }
227  unsigned int inputLocationSize() const { return m_inputLocations.value().size(); }
228 
229  // derived classes can NOT implement execute
230  StatusCode execute( EventContext const& ) const override final {
232  ins.reserve( m_inputs.size() );
233  std::transform( m_inputs.begin(), m_inputs.end(), std::back_inserter( ins ),
235  try {
236  std::apply(
237  [&]( auto&... outhandle ) {
239  std::apply(
240  [&outhandle...]( auto&&... data ) {
241  ( details::put( outhandle, std::forward<decltype( data )>( data ) ), ... );
242  },
243  std::as_const( *this )( std::as_const( ins ) ) );
245  },
246  this->m_outputs );
247  return FilterDecision::PASSED;
248  } catch ( GaudiException& e ) {
249  ( e.code() ? this->warning() : this->error() ) << e.message() << endmsg;
250  return e.code();
251  }
252  }
253 
254  virtual std::tuple<Outs...> operator()( const vector_of_const_<In>& inputs ) const = 0;
255 
256  private:
257  // if In is a pointer, it signals optional (as opposed to mandatory) input
258  template <typename T>
260  std::vector<InputHandle_t<In>> m_inputs; // and make the handles properties instead...
261  Gaudi::Property<std::vector<std::string>> m_inputLocations; // TODO/FIXME: remove this duplication...
262  // TODO/FIXME: replace vector of string property + call-back with a
263  // vector<handle> property ... as soon as declareProperty can deal with that.
264  };
265 
266  template <typename... Outs, typename In, typename Traits_>
268  std::string const& name, ISvcLocator* pSvcLocator, KeyValues const& inputs, OutKeys const& outputs )
269  : base_class( name, pSvcLocator, outputs )
270  , m_inputLocations{
271  this, inputs.first, inputs.second,
273  this->m_inputs = details::make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
274  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
275  // optional flag... so do it
276  // explicitly here...
277  std::for_each( this->m_inputs.begin(), this->m_inputs.end(), []( auto& h ) { h.setOptional( true ); } );
278  }
279  },
281 
282  // Many of the same -> N with filter functionality
283  template <typename Signature, typename Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
285 
286  template <typename... Outs, typename In, typename Traits_>
287  struct MergingMultiTransformerFilter<std::tuple<Outs...>( vector_of_const_<In> const& ), Traits_>
288  : details::DataHandleMixin<std::tuple<Outs...>, std::tuple<>, Traits_> {
289 
290  private:
292 
293  public:
294  using KeyValue = typename base_class::KeyValue;
295  using KeyValues = typename base_class::KeyValues;
296  using OutKeys = std::array<KeyValue, sizeof...( Outs )>;
297 
299  OutKeys const& outputs );
300 
301  // accessor to input Locations
302  std::string const& inputLocation( unsigned int n ) const { return m_inputLocations.value()[n]; }
303  unsigned int inputLocationSize() const { return m_inputLocations.value().size(); }
304 
305  // derived classes can NOT implement execute
306  StatusCode execute( EventContext const& ) const override final {
308  ins.reserve( m_inputs.size() );
309  std::transform( m_inputs.begin(), m_inputs.end(), std::back_inserter( ins ),
311  try {
312  return std::apply(
313  [&]( auto&... outhandle ) {
315  return std::apply(
316  [&outhandle...]( bool passed, auto&&... data ) {
317  ( details::put( outhandle, std::forward<decltype( data )>( data ) ), ... );
318  return passed;
319  },
320  ( *this )( std::as_const( ins ) ) );
322  },
323  this->m_outputs )
326  } catch ( GaudiException& e ) {
327  ( e.code() ? this->warning() : this->error() ) << e.message() << endmsg;
328  return e.code();
329  }
330  }
331 
332  virtual std::tuple<bool, Outs...> operator()( const vector_of_const_<In>& inputs ) const = 0;
333 
334  private:
335  // if In is a pointer, it signals optional (as opposed to mandatory) input
336  template <typename T>
338  std::vector<InputHandle_t<In>> m_inputs; // and make the handles properties instead...
339  Gaudi::Property<std::vector<std::string>> m_inputLocations; // TODO/FIXME: remove this duplication...
340  // TODO/FIXME: replace vector of string property + call-back with a
341  // vector<handle> property ... as soon as declareProperty can deal with that.
342  };
343 
344  template <typename... Outs, typename In, typename Traits_>
347  ISvcLocator* pSvcLocator,
348  KeyValues const& inputs,
349  OutKeys const& outputs )
350  : base_class( name, pSvcLocator, outputs )
351  , m_inputLocations{
352  this, inputs.first, inputs.second,
354  this->m_inputs = details::make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
355  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
356  // optional flag... so do it
357  // explicitly here...
358  std::for_each( this->m_inputs.begin(), this->m_inputs.end(), []( auto& h ) { h.setOptional( true ); } );
359  }
360  },
362 
363 } // namespace Gaudi::Functional
364 
365 #endif
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, const KeyValues &inputs)
Definition: MergingTransformer.h:50
Gaudi::Details::PropertyBase
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: PropertyBase.h:35
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, const KeyValues &inputs, const KeyValue &output)
Definition: MergingTransformer.h:145
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::MergingMultiTransformerFilter
MergingMultiTransformerFilter(std::string const &name, ISvcLocator *locator, KeyValues const &inputs, OutKeys const &outputs)
std::for_each
T for_each(T... args)
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::InputHandle_t
InputHandle_t< Traits_, std::remove_pointer_t< T > > InputHandle_t
Definition: MergingTransformer.h:189
GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
Definition: FunctionalDetails.h:43
std::false_type
std::string
STL class.
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::m_inputs
std::vector< InputHandle_t< In > > m_inputs
Definition: MergingTransformer.h:338
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::inputLocationSize
unsigned int inputLocationSize() const
Definition: MergingTransformer.h:164
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::m_inputs
std::vector< InputHandle_t< In > > m_inputs
Definition: MergingTransformer.h:190
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::execute
StatusCode execute(EventContext const &) const override final
Definition: MergingTransformer.h:230
Gaudi::Functional::details::make_vector_of_handles
Handles make_vector_of_handles(IDataHandleHolder *owner, const std::vector< std::string > &init)
Definition: FunctionalDetails.h:379
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::m_inputLocations
Gaudi::Property< std::vector< std::string > > m_inputLocations
Definition: MergingTransformer.h:191
std::vector
STL class.
ISvcLocator
Definition: ISvcLocator.h:46
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:125
std::back_inserter
T back_inserter(T... args)
Gaudi::Functional::MergingMultiTransformer
Definition: MergingTransformer.h:208
GaudiException
Definition: GaudiException.h:31
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:219
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:126
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:295
Gaudi::Functional::details::vector_of_const_::reserve
void reserve(size_type size)
Definition: FunctionalDetails.h:315
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:294
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::operator()
virtual std::tuple< Outs... > operator()(const vector_of_const_< In > &inputs) const =0
Gaudi::Functional::FilterDecision::FAILED
@ FAILED
std::tuple
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::inputLocation
const std::string & inputLocation(unsigned int n) const
Definition: MergingTransformer.h:163
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::inputLocationSize
unsigned int inputLocationSize() const
Definition: MergingTransformer.h:227
Gaudi::Functional::details::vector_of_const_
Definition: FunctionalDetails.h:267
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:48
gaudirun.output
output
Definition: gaudirun.py:506
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::inputLocation
const std::string & inputLocation(unsigned int n) const
Definition: MergingTransformer.h:85
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::m_inputLocations
Gaudi::Property< std::vector< std::string > > m_inputLocations
Definition: MergingTransformer.h:261
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, const KeyValues &inputs)
Definition: MergingTransformer.h:128
Gaudi::Details::Property::ImmediatelyInvokeHandler
Gaudi::tagged_bool< class ImmediatelyInvokeHandler_tag > ImmediatelyInvokeHandler
Definition: Property.h:23
GaudiException::message
virtual const std::string & message() const
error message to be printed
Definition: GaudiException.h:68
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::execute
StatusCode execute() override final
Definition: MergingTransformer.h:89
TimingHistograms.name
name
Definition: TimingHistograms.py:23
StatusCode
Definition: StatusCode.h:65
details
Definition: AnyDataWrapper.h:18
Gaudi::Functional::details::MergingTransformer
Definition: MergingTransformer.h:37
Gaudi::Functional::details::is_void_fun
Definition: MergingTransformer.h:30
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::InputHandle_t
InputHandle_t< Traits_, std::remove_pointer_t< T > > InputHandle_t
Definition: MergingTransformer.h:111
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::inputLocationSize
unsigned int inputLocationSize() const
Definition: MergingTransformer.h:303
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::inputLocation
std::string const & inputLocation(unsigned int n) const
Definition: MergingTransformer.h:226
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::inputLocationSize
unsigned int inputLocationSize() const
Definition: MergingTransformer.h:86
AlgSequencer.h
h
Definition: AlgSequencer.py:26
Gaudi::Functional::details::InputHandle_t
Gaudi::cpp17::detected_or_t< DataObjectReadHandle< T >, detail2::InputHandle_t, Tr, T > InputHandle_t
Definition: FunctionalDetails.h:370
std::array
STL class.
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::inputLocation
std::string const & inputLocation(unsigned int n) const
Definition: MergingTransformer.h:302
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::m_inputLocations
Gaudi::Property< std::vector< std::string > > m_inputLocations
Definition: MergingTransformer.h:339
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::InputHandle_t
details::InputHandle_t< Traits_, typename std::remove_pointer< T >::type > InputHandle_t
Definition: MergingTransformer.h:259
Gaudi::Functional::FilterDecision::PASSED
@ PASSED
Algorithm.h
Gaudi::Functional
Definition: Consumer.h:19
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::execute
StatusCode execute(const EventContext &) const override final
Definition: MergingTransformer.h:167
std::transform
T transform(T... args)
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:221
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::MergingMultiTransformer
MergingMultiTransformer(std::string const &name, ISvcLocator *locator, KeyValues const &inputs, OutKeys const &outputs)
FunctionalUtilities.h
GaudiException::code
virtual const StatusCode & code() const
StatusCode for Exception.
Definition: GaudiException.h:86
Gaudi::Functional::MergingMultiTransformerFilter
Definition: MergingTransformer.h:284
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:47
Gaudi::Functional::details::details2::get_from_handle
Definition: FunctionalDetails.h:236
std
STL namespace.
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::m_inputs
std::vector< InputHandle_t< In > > m_inputs
Definition: MergingTransformer.h:260
EventContext
Definition: EventContext.h:34
Gaudi::Functional::Traits::useDefaults
use_<> useDefaults
Definition: FunctionalUtilities.h:95
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::m_inputs
std::vector< InputHandle_t< In > > m_inputs
Definition: MergingTransformer.h:112
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::operator()
virtual std::tuple< bool, Outs... > operator()(const vector_of_const_< In > &inputs) const =0
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::m_inputLocations
Gaudi::Property< std::vector< std::string > > m_inputLocations
Definition: MergingTransformer.h:113
GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
Definition: FunctionalDetails.h:44
Gaudi::Functional::details::DataHandleMixin
Definition: FunctionalDetails.h:446
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::operator()
virtual Out operator()(const vector_of_const_< In > &inputs) const =0
Gaudi::Functional::details::is_void_fun_v
constexpr bool is_void_fun_v
Definition: MergingTransformer.h:34
FunctionalDetails.h
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::execute
StatusCode execute(EventContext const &) const override final
Definition: MergingTransformer.h:306
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:218
FunctionalFilterDecision.h
Gaudi::Property
Implementation of property with value of concrete type.
Definition: Property.h:39
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, false >::operator()
virtual Out operator()(const vector_of_const_< In > &inputs) const =0
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::InputHandle_t
details::InputHandle_t< Traits_, typename std::remove_pointer< T >::type > InputHandle_t
Definition: MergingTransformer.h:337
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, const KeyValues &inputs, const KeyValue &output)
Definition: MergingTransformer.h:67
Gaudi::Functional::details::put
auto put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Definition: FunctionalDetails.h:147