The Gaudi Framework  master (f31105fd)
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-2025 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 
13 #include "details.h"
14 #include "utilities.h"
15 #include <Gaudi/Algorithm.h>
17 #include <functional>
18 #include <string>
19 #include <vector>
20 
21 namespace Gaudi::Functional {
22 
23  using details::vector_of_const_;
24 
25  namespace details {
26  template <typename F, size_t... Is>
27  auto for_impl( F&& f, std::index_sequence<Is...> ) {
28  if constexpr ( std::disjunction_v<std::is_void<std::invoke_result_t<F, std::integral_constant<int, Is>>>...> ) {
29  ( std::invoke( f, std::integral_constant<int, Is>{} ), ... );
30  } else {
31  return std::array{ std::invoke( f, std::integral_constant<int, Is>{} )... };
32  }
33  }
34 
35  template <auto N, typename F>
36  decltype( auto ) for_( F&& f ) {
37  return for_impl( std::forward<F>( f ), std::make_index_sequence<N>{} );
38  }
39 
40  template <typename Sig>
41  constexpr bool is_void_fun_v = false;
42  template <typename... Args>
43  constexpr bool is_void_fun_v<void( Args... )> = true;
44  template <typename Sig>
45  concept is_void_fun = is_void_fun_v<Sig>;
46 
47  template <typename Signature, typename Traits_, bool isLegacy>
49 
51  template <typename Out, typename In, typename Traits_>
52  struct MergingTransformer<Out( const vector_of_const_<In>& ), Traits_, true>
54  private:
56 
57  public:
58  using KeyValue = typename base_class::KeyValue;
59  using KeyValues = typename base_class::KeyValues;
60 
62  : base_class( std::move( name ), locator )
63  , m_inputLocations{ this, inputs.first, details::to_DataObjID( inputs.second ),
64  [this]( Gaudi::Details::PropertyBase& ) {
65  this->m_inputs =
66  make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
67  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
68  // optional flag... so do it
69  // explicitly here...
70  std::for_each( this->m_inputs.begin(), this->m_inputs.end(),
71  []( auto& h ) { h.setOptional( true ); } );
72  }
73  },
75  static_assert( std::is_void_v<Out> );
76  }
77 
79  : base_class( std::move( name ), locator, output )
80  , m_inputLocations{ this, inputs.first, details::to_DataObjID( inputs.second ),
81  [this]( Gaudi::Details::PropertyBase& ) {
82  this->m_inputs =
83  make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
84  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
85  // optional flag... so do it
86  // explicitly here...
87  std::for_each( this->m_inputs.begin(), this->m_inputs.end(),
88  []( auto& h ) { h.setOptional( true ); } );
89  }
90  },
92  static_assert( !std::is_void_v<Out> );
93  }
94 
95  // accessor to input Locations
96  const std::string& inputLocation( unsigned int n ) const { return m_inputLocations.value()[n].key(); }
97  unsigned int inputLocationSize() const { return m_inputLocations.value().size(); }
98 
99  // derived classes can NOT implement execute
100  StatusCode execute() override final {
102  ins.reserve( m_inputs.size() );
103  std::transform( m_inputs.begin(), m_inputs.end(), std::back_inserter( ins ), details2::get_from_handle<In>{} );
104  try {
105  if constexpr ( std::is_void_v<Out> ) {
106  std::as_const ( *this )( std::as_const( ins ) );
107  } else {
108  put( std::get<0>( this->m_outputs ), std::as_const( *this )( std::as_const( ins ) ) );
109  }
110  return FilterDecision::PASSED;
111  } catch ( GaudiException& e ) {
112  if ( e.code().isFailure() ) this->error() << e.tag() << " : " << e.message() << endmsg;
113  return e.code();
114  }
115  }
116 
117  virtual Out operator()( const vector_of_const_<In>& inputs ) const = 0;
118 
119  private:
120  // if In is a pointer, it signals optional (as opposed to mandatory) input
121  template <typename T>
123  std::vector<InputHandle_t<In>> m_inputs; // and make the handles properties instead...
124  Gaudi::Property<std::vector<DataObjID>> m_inputLocations; // TODO/FIXME: remove this duplication...
125  // TODO/FIXME: replace vector of DataObjID property + call-back with a
126  // vector<handle> property ... as soon as declareProperty can deal with that.
127  };
128 
129  template <typename Out, typename... Ins, typename Traits_>
130  struct MergingTransformer<Out( const vector_of_const_<Ins>&... ), Traits_, false>
132 
134  using KeyValue = typename base_class::KeyValue;
135  using KeyValues = typename base_class::KeyValues;
136  using InKeys = details::RepeatValues_<KeyValues, sizeof...( Ins )>;
137 
138  private:
139  auto construct_properties( InKeys inputs ) {
140  return details::for_<sizeof...( Ins )>( [&]( auto I ) {
141  constexpr auto i = decltype( I )::value;
142  auto& ins = std::get<i>( inputs );
144  this, ins.first, details::to_DataObjID( ins.second ),
145  [this]( auto&& ) {
146  auto& handles = std::get<i>( this->m_inputs );
147  auto& ins = std::get<i>( this->m_inputLocations );
148  using Handles = typename std::decay_t<decltype( handles )>;
149  handles = make_vector_of_handles<Handles>( this, ins );
150  if ( std::is_pointer_v<typename Handles::value_type> ) { // handle constructor does not (yet) allow to
151  // set
152  // optional flag... so do it
153  // explicitly here...
154  std::for_each( handles.begin(), handles.end(), []( auto& h ) { h.setOptional( true ); } );
155  }
156  },
158  } );
159  }
160 
161  public:
163  : base_class( std::move( name ), locator ), m_inputLocations{ construct_properties( inputs ) } {
164  static_assert( std::is_void_v<Out> );
165  }
166 
168  : MergingTransformer{ std::move( name ), locator, InKeys{ inputs } } {
169  static_assert( sizeof...( Ins ) == 1 );
170  }
171 
173  : base_class( std::move( name ), locator, output ), m_inputLocations{ construct_properties( inputs ) } {
174  static_assert( !std::is_void_v<Out> );
175  }
176 
178  : MergingTransformer{ std::move( name ), locator, InKeys{ inputs }, output } {
179  static_assert( sizeof...( Ins ) == 1 );
180  }
181 
182  // accessor to input Locations
183  const std::string& inputLocation( unsigned int i, unsigned int j ) const {
184  return m_inputLocations.at( i ).value().at( j ).key();
185  }
186  const std::string& inputLocation( unsigned int i ) const {
187  static_assert( sizeof...( Ins ) == 1 );
188  return inputLocation( 0, i );
189  }
190  unsigned int inputLocationSize( int i = 0 ) const { return m_inputLocations.at( i ).value().size(); }
191 
192  // derived classes can NOT implement execute
193  StatusCode execute( const EventContext& ) const override final {
195  details::for_<sizeof...( Ins )>( [&]( auto I ) {
196  constexpr size_t i = decltype( I )::value;
197  auto& ins = std::get<i>( inss );
198  auto& handles = std::get<i>( m_inputs );
199  ins.reserve( handles.size() );
200  std::transform( handles.begin(), handles.end(), std::back_inserter( ins ),
201  details::details2::get_from_handle<typename std::decay_t<decltype( ins )>::value_type>{} );
202  } );
203  try {
204  if constexpr ( std::is_void_v<Out> ) {
205  std::apply( [&]( auto&&... ins ) { return std::as_const( *this )( std::as_const( ins )... ); }, inss );
206  } else {
207  put( std::get<0>( this->m_outputs ),
208  std::apply( [&]( auto&&... ins ) { return std::as_const( *this )( std::as_const( ins )... ); },
209  inss ) );
210  }
211  return FilterDecision::PASSED;
212  } catch ( GaudiException& e ) {
213  if ( e.code().isFailure() ) this->error() << e.tag() << " : " << e.message() << endmsg;
214  return e.code();
215  }
216  }
217 
218  virtual Out operator()( const vector_of_const_<Ins>&... inputs ) const = 0;
219 
220  private:
221  // if In is a pointer, it signals optional (as opposed to mandatory) input
222  template <typename T>
224  std::tuple<std::vector<InputHandle_t<Ins>>...> m_inputs; // and make the handles properties instead...
225  std::array<Gaudi::Property<std::vector<DataObjID>>, sizeof...( Ins )> m_inputLocations; // TODO/FIXME: remove
226  // this duplication...
227  // TODO/FIXME: replace vector of string property + call-back with a
228  // vector<handle> property ... as soon as declareProperty can deal with that.
229  };
230 
231  } // namespace details
232 
233  template <typename Signature, typename Traits_ = Traits::useDefaults>
235 
236  // more meaningful alias for cases where the return type in Signature is void
237  template <details::is_void_fun Signature, typename Traits_ = Traits::useDefaults>
239 
240  // M vectors of the same -> N
241  template <typename Signature, typename Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
243 
244  template <typename... Outs, typename... Ins, typename Traits_>
245  struct MergingMultiTransformer<std::tuple<Outs...>( vector_of_const_<Ins> const&... ), Traits_>
246  : details::DataHandleMixin<std::tuple<Outs...>, std::tuple<>, Traits_> {
247 
248  private:
250 
251  public:
252  using KeyValue = typename base_class::KeyValue;
253  using KeyValues = typename base_class::KeyValues;
254  using InKeys = details::RepeatValues_<KeyValues, sizeof...( Ins )>;
255  using OutKeys = details::RepeatValues_<KeyValue, sizeof...( Outs )>;
256  static constexpr size_t n_args = sizeof...( Ins );
257 
258  MergingMultiTransformer( std::string const& name, ISvcLocator* pSvcLocator, InKeys inputs, OutKeys outputs )
259  : base_class{ name, pSvcLocator, std::move( outputs ) }
260  , m_inputLocations{ details::for_<n_args>( [&]( auto I ) {
261  constexpr auto i = decltype( I )::value;
262  auto& ins = std::get<i>( inputs );
264  this, ins.first, details::to_DataObjID( ins.second ),
265  [this]( auto&& ) {
266  auto& handles = std::get<i>( this->m_inputs );
267  auto& ins = std::get<i>( this->m_inputLocations );
268  using In = typename std::decay_t<decltype( handles )>::value_type;
269  handles = details::make_vector_of_handles<std::decay_t<decltype( handles )>>( this, ins );
270  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
271  // optional flag... so do it
272  // explicitly here...
273  std::for_each( handles.begin(), handles.end(), []( auto& h ) { h.setOptional( true ); } );
274  }
275  },
277  } ) } {}
278 
279  MergingMultiTransformer( std::string const& name, ISvcLocator* pSvcLocator, KeyValues inputs, OutKeys outputs )
280  : MergingMultiTransformer{ name, pSvcLocator, InKeys{ std::move( inputs ) }, std::move( outputs ) } {
281  static_assert( sizeof...( Ins ) == 1 );
282  }
283 
284  // accessor to input Locations
285  std::string const& inputLocation( unsigned int i, unsigned int j ) const {
286  return m_inputLocations.at( i ).value().at( j ).key();
287  }
288  std::string const& inputLocation( unsigned int j ) const {
289  static_assert( n_args == 1 );
290  return inputLocation( 0, j );
291  }
292  unsigned int inputLocationSize( int i = 0 ) const { return m_inputLocations.at( i ).value().size(); }
293 
294  // derived classes can NOT implement execute
295  StatusCode execute( EventContext const& ) const override final {
297  details::for_<sizeof...( Ins )>( [&]( auto I ) {
298  constexpr size_t i = decltype( I )::value;
299  auto& ins = std::get<i>( inss );
300  auto& handles = std::get<i>( m_inputs );
301  ins.reserve( handles.size() );
302  std::transform( handles.begin(), handles.end(), std::back_inserter( ins ),
303  details::details2::get_from_handle<typename std::decay_t<decltype( ins )>::value_type>{} );
304  } );
305  try {
306  std::apply(
307  [&]( auto&... outhandle ) {
309  std::apply(
310  [&outhandle...]( auto&&... data ) {
311  ( details::put( outhandle, std::forward<decltype( data )>( data ) ), ... );
312  },
313  std::apply( [&]( auto&&... ins ) { return std::as_const( *this )( std::as_const( ins )... ); },
314  inss ) );
316  },
317  this->m_outputs );
318  return FilterDecision::PASSED;
319  } catch ( GaudiException& e ) {
320  if ( e.code().isFailure() ) this->error() << e.tag() << " : " << e.message() << endmsg;
321  return e.code();
322  }
323  }
324 
325  virtual std::tuple<Outs...> operator()( const vector_of_const_<Ins>&... inputs ) const = 0;
326 
327  private:
328  // if In is a pointer, it signals optional (as opposed to mandatory) input
329  template <typename T>
331  std::tuple<std::vector<InputHandle_t<Ins>>...> m_inputs; // and make the handles properties instead...
332  std::array<Gaudi::Property<std::vector<DataObjID>>, sizeof...( Ins )> m_inputLocations; // TODO/FIXME: remove this
333  // duplication...
334  // TODO/FIXME: replace vector of string property + call-back with a
335  // vector<handle> property ... as soon as declareProperty can deal with that.
336  };
337 
338  // Many of the same -> N with filter functionality
339  template <typename Signature, typename Traits_ = Traits::BaseClass_t<Gaudi::Algorithm>>
341 
342  template <typename... Outs, typename In, typename Traits_>
343  struct MergingMultiTransformerFilter<std::tuple<Outs...>( vector_of_const_<In> const& ), Traits_>
344  : details::DataHandleMixin<std::tuple<Outs...>, std::tuple<>, Traits_> {
345 
346  private:
348 
349  public:
350  using KeyValue = typename base_class::KeyValue;
351  using KeyValues = typename base_class::KeyValues;
352  using OutKeys = details::RepeatValues_<KeyValue, sizeof...( Outs )>;
353 
355  OutKeys const& outputs );
356 
357  // accessor to input Locations
358  std::string const& inputLocation( unsigned int n ) const { return m_inputLocations.value()[n].key(); }
359  unsigned int inputLocationSize() const { return m_inputLocations.value().size(); }
360 
361  // derived classes can NOT implement execute
362  StatusCode execute( EventContext const& ) const override final {
364  ins.reserve( m_inputs.size() );
365  std::transform( m_inputs.begin(), m_inputs.end(), std::back_inserter( ins ),
367  try {
368  return std::apply(
369  [&]( auto&... outhandle ) {
371  return std::apply(
372  [&outhandle...]( bool passed, auto&&... data ) {
373  ( details::put( outhandle, std::forward<decltype( data )>( data ) ), ... );
374  return passed;
375  },
376  ( *this )( std::as_const( ins ) ) );
378  },
379  this->m_outputs )
382  } catch ( GaudiException& e ) {
383  if ( e.code().isFailure() ) this->error() << e.tag() << " : " << e.message() << endmsg;
384  return e.code();
385  }
386  }
387 
388  virtual std::tuple<bool, Outs...> operator()( const vector_of_const_<In>& inputs ) const = 0;
389 
390  private:
391  // if In is a pointer, it signals optional (as opposed to mandatory) input
392  template <typename T>
394  std::vector<InputHandle_t<In>> m_inputs; // and make the handles properties instead...
395  Gaudi::Property<std::vector<DataObjID>> m_inputLocations; // TODO/FIXME: remove this duplication...
396  // TODO/FIXME: replace vector of string property + call-back with a
397  // vector<handle> property ... as soon as declareProperty can deal with that.
398  };
399 
400  template <typename... Outs, typename In, typename Traits_>
403  ISvcLocator* pSvcLocator,
404  KeyValues const& inputs,
405  OutKeys const& outputs )
406  : base_class( name, pSvcLocator, outputs )
407  , m_inputLocations{
408  this, inputs.first, details::to_DataObjID( inputs.second ),
409  [this]( Gaudi::Details::PropertyBase& ) {
410  this->m_inputs = details::make_vector_of_handles<decltype( this->m_inputs )>( this, m_inputLocations );
411  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
412  // optional flag... so do it
413  // explicitly here...
414  std::for_each( this->m_inputs.begin(), this->m_inputs.end(), []( auto& h ) { h.setOptional( true ); } );
415  }
416  },
418 
419 } // namespace Gaudi::Functional
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:61
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::InputHandle_t
details::InputHandle_t< Traits_, typename std::remove_pointer< T >::type > InputHandle_t
Definition: MergingTransformer.h:330
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_< Ins > &...), Traits_, false >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, const KeyValues &inputs, const KeyValue &output)
Definition: MergingTransformer.h:177
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::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::OutKeys
details::RepeatValues_< KeyValue, sizeof...(Outs)> OutKeys
Definition: MergingTransformer.h:352
std::integral_constant
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:252
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::InKeys
details::RepeatValues_< KeyValues, sizeof...(Ins)> InKeys
Definition: MergingTransformer.h:254
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:394
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, InKeys inputs, const KeyValue &output)
Definition: MergingTransformer.h:172
std::move
T move(T... args)
Gaudi::Functional::details::InputHandle_t
Gaudi::cpp17::detected_or_t< detail2::DefaultInputHandle< T >, detail2::InputHandle_t, Tr, T > InputHandle_t
Definition: details.h:431
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, const KeyValues &inputs)
Definition: MergingTransformer.h:167
std::is_void
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::execute
StatusCode execute(EventContext const &) const override final
Definition: MergingTransformer.h:295
std::vector
STL class.
ISvcLocator
Definition: ISvcLocator.h:46
std::back_inserter
T back_inserter(T... args)
Gaudi::Functional::MergingMultiTransformer
Definition: MergingTransformer.h:242
GaudiException
Definition: GaudiException.h:32
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::m_inputs
std::tuple< std::vector< InputHandle_t< Ins > >... > m_inputs
Definition: MergingTransformer.h:331
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::inputLocation
const std::string & inputLocation(unsigned int i) const
Definition: MergingTransformer.h:186
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::construct_properties
auto construct_properties(InKeys inputs)
Definition: MergingTransformer.h:139
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:351
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::MergingTransformer
MergingTransformer(std::string name, ISvcLocator *locator, InKeys inputs)
Definition: MergingTransformer.h:162
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::inputLocation
const std::string & inputLocation(unsigned int i, unsigned int j) const
Definition: MergingTransformer.h:183
Gaudi::Functional::details::vector_of_const_::reserve
void reserve(size_type size)
Definition: details.h:338
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:350
Gaudi::Functional::FilterDecision::FAILED
@ FAILED
std::tuple
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::inputLocationSize
unsigned int inputLocationSize(int i=0) const
Definition: MergingTransformer.h:190
Gaudi::Functional::details::vector_of_const_
Definition: details.h:290
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:59
gaudirun.output
output
Definition: gaudirun.py:521
GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
Definition: details.h:39
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::inputLocation
const std::string & inputLocation(unsigned int n) const
Definition: MergingTransformer.h:96
Gaudi::Functional::details::to_DataObjID
std::vector< DataObjID > to_DataObjID(const std::vector< std::string > &in)
Definition: details.h:114
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::inputLocationSize
unsigned int inputLocationSize(int i=0) const
Definition: MergingTransformer.h:292
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::inputLocation
std::string const & inputLocation(unsigned int j) const
Definition: MergingTransformer.h:288
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::execute
StatusCode execute(const EventContext &) const override final
Definition: MergingTransformer.h:193
GaudiException::message
virtual const std::string & message() const
error message to be printed
Definition: GaudiException.h:69
Gaudi::Functional::details::make_vector_of_handles
Handles make_vector_of_handles(IDataHandleHolder *owner, const std::vector< DataObjID > &init)
Definition: details.h:441
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::execute
StatusCode execute() override final
Definition: MergingTransformer.h:100
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:134
Gaudi::Functional::details::is_void_fun
concept is_void_fun
Definition: MergingTransformer.h:45
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::InKeys
details::RepeatValues_< KeyValues, sizeof...(Ins)> InKeys
Definition: MergingTransformer.h:136
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:135
StatusCode
Definition: StatusCode.h:65
Gaudi::tagged_bool_ns::tagged_bool
Definition: TaggedBool.h:16
details
Definition: AnyDataWrapper.h:19
Gaudi::Functional::details::MergingTransformer
Definition: MergingTransformer.h:48
std::string::at
T at(T... args)
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::m_inputs
std::tuple< std::vector< InputHandle_t< Ins > >... > m_inputs
Definition: MergingTransformer.h:224
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:122
ProduceConsume.j
j
Definition: ProduceConsume.py:104
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::inputLocationSize
unsigned int inputLocationSize() const
Definition: MergingTransformer.h:359
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::m_inputLocations
Gaudi::Property< std::vector< DataObjID > > m_inputLocations
Definition: MergingTransformer.h:124
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::inputLocation
std::string const & inputLocation(unsigned int i, unsigned int j) const
Definition: MergingTransformer.h:285
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::inputLocationSize
unsigned int inputLocationSize() const
Definition: MergingTransformer.h:97
AlgSequencer.h
h
Definition: AlgSequencer.py:31
std::array
STL class.
Gaudi::Functional::details::for_impl
auto for_impl(F &&f, std::index_sequence< Is... >)
Definition: MergingTransformer.h:27
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::inputLocation
std::string const & inputLocation(unsigned int n) const
Definition: MergingTransformer.h:358
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:202
GaudiException::tag
virtual const std::string & tag() const
name tag for the exception, or exception type
Definition: GaudiException.h:78
GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
Definition: details.h:40
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::MergingMultiTransformer
MergingMultiTransformer(std::string const &name, ISvcLocator *pSvcLocator, KeyValues inputs, OutKeys outputs)
Definition: MergingTransformer.h:279
utilities.h
std::transform
T transform(T... args)
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::operator()
virtual std::tuple< Outs... > operator()(const vector_of_const_< Ins > &... inputs) const =0
cpluginsvc.n
n
Definition: cpluginsvc.py:234
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::InputHandle_t
InputHandle_t< Traits_, std::remove_pointer_t< T > > InputHandle_t
Definition: MergingTransformer.h:223
Gaudi::Functional::details::for_
decltype(auto) for_(F &&f)
Definition: MergingTransformer.h:36
GaudiException::code
virtual const StatusCode & code() const
StatusCode for Exception.
Definition: GaudiException.h:87
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:130
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
Gaudi::Functional::MergingMultiTransformerFilter
Definition: MergingTransformer.h:340
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::KeyValue
typename base_class::KeyValue KeyValue
Definition: MergingTransformer.h:58
Gaudi::Functional::details::details2::get_from_handle
Definition: details.h:255
std
STL namespace.
EventContext
Definition: EventContext.h:34
Gaudi::Functional::details::RepeatValues_
decltype(get_values_helper< Value >(std::make_index_sequence< N >())) RepeatValues_
Definition: details.h:158
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::m_inputs
std::vector< InputHandle_t< In > > m_inputs
Definition: MergingTransformer.h:123
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::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::KeyValues
typename base_class::KeyValues KeyValues
Definition: MergingTransformer.h:253
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::MergingMultiTransformer
MergingMultiTransformer(std::string const &name, ISvcLocator *pSvcLocator, InKeys inputs, OutKeys outputs)
Definition: MergingTransformer.h:258
Gaudi::Functional::details::DataHandleMixin
Definition: details.h:512
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::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::m_inputLocations
Gaudi::Property< std::vector< DataObjID > > m_inputLocations
Definition: MergingTransformer.h:395
details.h
Gaudi::Functional::details::is_void_fun_v
constexpr bool is_void_fun_v
Definition: MergingTransformer.h:41
Gaudi::Functional::details::put
auto put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Definition: details.h:162
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< Ins > &...), Traits_, false >::operator()
virtual Out operator()(const vector_of_const_< Ins > &... inputs) const =0
Gaudi::Functional::MergingMultiTransformerFilter< std::tuple< Outs... >(vector_of_const_< In > const &), Traits_ >::execute
StatusCode execute(EventContext const &) const override final
Definition: MergingTransformer.h:362
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::OutKeys
details::RepeatValues_< KeyValue, sizeof...(Outs)> OutKeys
Definition: MergingTransformer.h:255
FunctionalFilterDecision.h
Gaudi::Property
Implementation of property with value of concrete type.
Definition: Property.h:37
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:393
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:78