The Gaudi Framework  master (594c33fa)
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true > Struct Template Referenceabstract

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

Inheritance diagram for Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >:
Collaboration diagram for Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >:

Public Types

using KeyValue = typename base_class::KeyValue
 
using KeyValues = typename base_class::KeyValues
 

Public Member Functions

 MergingTransformer (std::string name, ISvcLocator *locator, const KeyValues &inputs)
 
 MergingTransformer (std::string name, ISvcLocator *locator, const KeyValues &inputs, const KeyValue &output)
 
const std::stringinputLocation (unsigned int n) const
 
unsigned int inputLocationSize () const
 
StatusCode execute () override final
 
virtual Out operator() (const vector_of_const_< In > &inputs) const =0
 

Private Types

using base_class = DataHandleMixin< std::tuple< Out >, std::tuple<>, Traits_ >
 
template<typename T >
using InputHandle_t = InputHandle_t< Traits_, std::remove_pointer_t< T > >
 

Private Attributes

std::vector< InputHandle_t< In > > m_inputs
 
Gaudi::Property< std::vector< DataObjID > > m_inputLocations
 

Detailed Description

template<typename Out, typename In, typename Traits_>
struct Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >

Definition at line 52 of file MergingTransformer.h.

Member Typedef Documentation

◆ base_class

template<typename Out , typename In , typename Traits_ >
using Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::base_class = DataHandleMixin<std::tuple<Out>, std::tuple<>, Traits_>
private

Definition at line 55 of file MergingTransformer.h.

◆ InputHandle_t

template<typename Out , typename In , typename Traits_ >
template<typename T >
using Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::InputHandle_t = InputHandle_t<Traits_, std::remove_pointer_t<T> >
private

Definition at line 122 of file MergingTransformer.h.

◆ KeyValue

template<typename Out , typename In , typename Traits_ >
using Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::KeyValue = typename base_class::KeyValue

Definition at line 58 of file MergingTransformer.h.

◆ KeyValues

template<typename Out , typename In , typename Traits_ >
using Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::KeyValues = typename base_class::KeyValues

Definition at line 59 of file MergingTransformer.h.

Constructor & Destructor Documentation

◆ MergingTransformer() [1/2]

template<typename Out , typename In , typename Traits_ >
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::MergingTransformer ( std::string  name,
ISvcLocator locator,
const KeyValues inputs 
)
inline

Definition at line 61 of file MergingTransformer.h.

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  }

◆ MergingTransformer() [2/2]

template<typename Out , typename In , typename Traits_ >
Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::MergingTransformer ( std::string  name,
ISvcLocator locator,
const KeyValues inputs,
const KeyValue output 
)
inline

Definition at line 78 of file MergingTransformer.h.

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  }

Member Function Documentation

◆ execute()

template<typename Out , typename In , typename Traits_ >
StatusCode Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::execute ( )
inlinefinaloverride

Definition at line 100 of file MergingTransformer.h.

100  {
101  vector_of_const_<In> ins;
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  }

◆ inputLocation()

template<typename Out , typename In , typename Traits_ >
const std::string& Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::inputLocation ( unsigned int  n) const
inline

Definition at line 96 of file MergingTransformer.h.

96 { return m_inputLocations.value()[n].key(); }

◆ inputLocationSize()

template<typename Out , typename In , typename Traits_ >
unsigned int Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::inputLocationSize ( ) const
inline

Definition at line 97 of file MergingTransformer.h.

97 { return m_inputLocations.value().size(); }

◆ operator()()

template<typename Out , typename In , typename Traits_ >
virtual Out Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::operator() ( const vector_of_const_< In > &  inputs) const
pure virtual

Member Data Documentation

◆ m_inputLocations

template<typename Out , typename In , typename Traits_ >
Gaudi::Property<std::vector<DataObjID> > Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::m_inputLocations
private

Definition at line 124 of file MergingTransformer.h.

◆ m_inputs

template<typename Out , typename In , typename Traits_ >
std::vector<InputHandle_t<In> > Gaudi::Functional::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::m_inputs
private

Definition at line 123 of file MergingTransformer.h.


The documentation for this struct was generated from the following file:
Gaudi::Details::PropertyBase
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: PropertyBase.h:35
std::for_each
T for_each(T... args)
std::move
T move(T... args)
std::vector::size
T size(T... args)
std::back_inserter
T back_inserter(T... args)
GaudiException
Definition: GaudiException.h:31
gaudirun.output
output
Definition: gaudirun.py:521
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
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::details::MergingTransformer< Out(const vector_of_const_< In > &), Traits_, true >::base_class
DataHandleMixin< std::tuple< Out >, std::tuple<>, Traits_ > base_class
Definition: MergingTransformer.h:55
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
std::transform
T transform(T... args)
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:234
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
std::vector::begin
T begin(T... args)
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
std::vector::end
T end(T... args)
Gaudi::Functional::details::put
auto put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Definition: details.h:169