The Gaudi Framework  master (594c33fa)
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ > Struct Template Referenceabstract

#include </builds/gaudi/Gaudi/GaudiFunctional/include/Gaudi/Functional/MergingTransformer.h>

Inheritance diagram for Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >:
Collaboration diagram for Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >:

Public Types

using KeyValue = typename base_class::KeyValue
 
using KeyValues = typename base_class::KeyValues
 
using InKeys = details::RepeatValues_< KeyValues, sizeof...(Ins)>
 
using OutKeys = details::RepeatValues_< KeyValue, sizeof...(Outs)>
 

Public Member Functions

 MergingMultiTransformer (std::string const &name, ISvcLocator *pSvcLocator, InKeys inputs, OutKeys outputs)
 
 MergingMultiTransformer (std::string const &name, ISvcLocator *pSvcLocator, KeyValues inputs, OutKeys outputs)
 
std::string const & inputLocation (unsigned int i, unsigned int j) const
 
std::string const & inputLocation (unsigned int j) const
 
unsigned int inputLocationSize (int i=0) const
 
StatusCode execute (EventContext const &) const override final
 
virtual std::tuple< Outs... > operator() (const vector_of_const_< Ins > &... inputs) const =0
 

Static Public Attributes

static constexpr size_t n_args = sizeof...( Ins )
 

Private Types

using base_class = details::DataHandleMixin< std::tuple< Outs... >, std::tuple<>, Traits_ >
 
template<typename T >
using InputHandle_t = details::InputHandle_t< Traits_, typename std::remove_pointer< T >::type >
 

Private Attributes

std::tuple< std::vector< InputHandle_t< Ins > >... > m_inputs
 
std::array< Gaudi::Property< std::vector< DataObjID > >, sizeof...(Ins)> m_inputLocations
 

Detailed Description

template<typename... Outs, typename... Ins, typename Traits_>
struct Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >

Definition at line 246 of file MergingTransformer.h.

Member Typedef Documentation

◆ base_class

template<typename... Outs, typename... Ins, typename Traits_ >
using Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::base_class = details::DataHandleMixin<std::tuple<Outs...>, std::tuple<>, Traits_>
private

Definition at line 250 of file MergingTransformer.h.

◆ InKeys

template<typename... Outs, typename... Ins, typename Traits_ >
using Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::InKeys = details::RepeatValues_<KeyValues, sizeof...( Ins )>

Definition at line 255 of file MergingTransformer.h.

◆ InputHandle_t

template<typename... Outs, typename... Ins, typename Traits_ >
template<typename T >
using Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::InputHandle_t = details::InputHandle_t<Traits_, typename std::remove_pointer<T>::type>
private

Definition at line 331 of file MergingTransformer.h.

◆ KeyValue

template<typename... Outs, typename... Ins, typename Traits_ >
using Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::KeyValue = typename base_class::KeyValue

Definition at line 253 of file MergingTransformer.h.

◆ KeyValues

template<typename... Outs, typename... Ins, typename Traits_ >
using Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::KeyValues = typename base_class::KeyValues

Definition at line 254 of file MergingTransformer.h.

◆ OutKeys

template<typename... Outs, typename... Ins, typename Traits_ >
using Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::OutKeys = details::RepeatValues_<KeyValue, sizeof...( Outs )>

Definition at line 256 of file MergingTransformer.h.

Constructor & Destructor Documentation

◆ MergingMultiTransformer() [1/2]

template<typename... Outs, typename... Ins, typename Traits_ >
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::MergingMultiTransformer ( std::string const &  name,
ISvcLocator pSvcLocator,
InKeys  inputs,
OutKeys  outputs 
)
inline

Definition at line 259 of file MergingTransformer.h.

260  : base_class{ name, pSvcLocator, std::move( outputs ) }
261  , m_inputLocations{ details::for_<n_args>( [&]( auto I ) {
262  constexpr auto i = decltype( I )::value;
263  auto& ins = std::get<i>( inputs );
265  this, ins.first, details::to_DataObjID( ins.second ),
266  [this]( auto&& ) {
267  auto& handles = std::get<i>( this->m_inputs );
268  auto& ins = std::get<i>( this->m_inputLocations );
269  using In = typename std::decay_t<decltype( handles )>::value_type;
270  handles = details::make_vector_of_handles<std::decay_t<decltype( handles )>>( this, ins );
271  if ( std::is_pointer_v<In> ) { // handle constructor does not (yet) allow to set
272  // optional flag... so do it
273  // explicitly here...
274  std::for_each( handles.begin(), handles.end(), []( auto& h ) { h.setOptional( true ); } );
275  }
276  },
278  } ) } {}

◆ MergingMultiTransformer() [2/2]

template<typename... Outs, typename... Ins, typename Traits_ >
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::MergingMultiTransformer ( std::string const &  name,
ISvcLocator pSvcLocator,
KeyValues  inputs,
OutKeys  outputs 
)
inline

Definition at line 280 of file MergingTransformer.h.

281  : MergingMultiTransformer{ name, pSvcLocator, InKeys{ std::move( inputs ) }, std::move( outputs ) } {
282  static_assert( sizeof...( Ins ) == 1 );
283  }

Member Function Documentation

◆ execute()

template<typename... Outs, typename... Ins, typename Traits_ >
StatusCode Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::execute ( EventContext const &  ) const
inlinefinaloverride

Definition at line 296 of file MergingTransformer.h.

296  {
298  details::for_<sizeof...( Ins )>( [&]( auto I ) {
299  constexpr size_t i = decltype( I )::value;
300  auto& ins = std::get<i>( inss );
301  auto& handles = std::get<i>( m_inputs );
302  ins.reserve( handles.size() );
303  std::transform( handles.begin(), handles.end(), std::back_inserter( ins ),
304  details::details2::get_from_handle<typename std::decay_t<decltype( ins )>::value_type>{} );
305  } );
306  try {
307  std::apply(
308  [&]( auto&... outhandle ) {
310  std::apply(
311  [&outhandle...]( auto&&... data ) {
312  ( details::put( outhandle, std::forward<decltype( data )>( data ) ), ... );
313  },
314  std::apply( [&]( auto&&... ins ) { return std::as_const( *this )( std::as_const( ins )... ); },
315  inss ) );
317  },
318  this->m_outputs );
319  return FilterDecision::PASSED;
320  } catch ( GaudiException& e ) {
321  if ( e.code().isFailure() ) this->error() << e.tag() << " : " << e.message() << endmsg;
322  return e.code();
323  }
324  }

◆ inputLocation() [1/2]

template<typename... Outs, typename... Ins, typename Traits_ >
std::string const& Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::inputLocation ( unsigned int  i,
unsigned int  j 
) const
inline

Definition at line 286 of file MergingTransformer.h.

286  {
287  return m_inputLocations.at( i ).value().at( j ).key();
288  }

◆ inputLocation() [2/2]

template<typename... Outs, typename... Ins, typename Traits_ >
std::string const& Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::inputLocation ( unsigned int  j) const
inline

Definition at line 289 of file MergingTransformer.h.

289  {
290  static_assert( n_args == 1 );
291  return inputLocation( 0, j );
292  }

◆ inputLocationSize()

template<typename... Outs, typename... Ins, typename Traits_ >
unsigned int Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::inputLocationSize ( int  i = 0) const
inline

Definition at line 293 of file MergingTransformer.h.

293 { return m_inputLocations.at( i ).value().size(); }

◆ operator()()

template<typename... Outs, typename... Ins, typename Traits_ >
virtual std::tuple<Outs...> Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::operator() ( const vector_of_const_< Ins > &...  inputs) const
pure virtual

Member Data Documentation

◆ m_inputLocations

template<typename... Outs, typename... Ins, typename Traits_ >
std::array<Gaudi::Property<std::vector<DataObjID> >, sizeof...( Ins )> Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::m_inputLocations
private

Definition at line 333 of file MergingTransformer.h.

◆ m_inputs

template<typename... Outs, typename... Ins, typename Traits_ >
std::tuple<std::vector<InputHandle_t<Ins> >...> Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::m_inputs
private

Definition at line 332 of file MergingTransformer.h.

◆ n_args

template<typename... Outs, typename... Ins, typename Traits_ >
constexpr size_t Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::n_args = sizeof...( Ins )
staticconstexpr

Definition at line 257 of file MergingTransformer.h.


The documentation for this struct was generated from the following file:
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::base_class
details::DataHandleMixin< std::tuple< Outs... >, std::tuple<>, Traits_ > base_class
Definition: MergingTransformer.h:250
std::for_each
T for_each(T... args)
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::n_args
static constexpr size_t n_args
Definition: MergingTransformer.h:257
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::InKeys
details::RepeatValues_< KeyValues, sizeof...(Ins)> InKeys
Definition: MergingTransformer.h:255
std::move
T move(T... args)
std::back_inserter
T back_inserter(T... args)
GaudiException
Definition: GaudiException.h:31
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:332
std::tuple
GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
Definition: details.h:40
Gaudi::Functional::details::to_DataObjID
std::vector< DataObjID > to_DataObjID(const std::vector< std::string > &in)
Definition: details.h:115
GaudiException::message
virtual const std::string & message() const
error message to be printed
Definition: GaudiException.h:68
Gaudi::Functional::details::make_vector_of_handles
Handles make_vector_of_handles(IDataHandleHolder *owner, const std::vector< DataObjID > &init)
Definition: details.h:429
Gaudi::tagged_bool_ns::tagged_bool
Definition: TaggedBool.h:16
std::array::at
T at(T... args)
ProduceConsume.j
j
Definition: ProduceConsume.py:101
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:286
AlgSequencer.h
h
Definition: AlgSequencer.py:31
Gaudi::Property::value
const ValueType & value() const
Definition: Property.h:239
Gaudi::Functional::FilterDecision::PASSED
@ PASSED
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
GaudiException::tag
virtual const std::string & tag() const
name tag for the exception, or exception type
Definition: GaudiException.h:77
GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
Definition: details.h:41
std::transform
T transform(T... args)
Gaudi::Functional::MergingMultiTransformer< std::tuple< Outs... >(vector_of_const_< Ins > const &...), Traits_ >::m_inputLocations
std::array< Gaudi::Property< std::vector< DataObjID > >, sizeof...(Ins)> m_inputLocations
Definition: MergingTransformer.h:333
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:86
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:129
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
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:259
Gaudi::Property
Implementation of property with value of concrete type.
Definition: Property.h:39