The Gaudi Framework  master (594c33fa)
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true > Class Template Referenceabstract

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

Inheritance diagram for Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >:
Collaboration diagram for Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >:

Public Types

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

Public Member Functions

 SplittingTransformer (std::string name, ISvcLocator *locator, const RepeatValues_< KeyValue, N > &inputs, const KeyValues &outputs)
 
 SplittingTransformer (std::string name, ISvcLocator *locator, const KeyValue &input, const KeyValues &output)
 
const std::stringoutputLocation (unsigned int n) const
 
unsigned int outputLocationSize () const
 
StatusCode execute () override final
 
virtual vector_of_< Out > operator() (const In &...) const =0
 

Static Public Attributes

constexpr static std::size_t N = base_class::N_in
 

Private Types

using base_class = details::DataHandleMixin< std::tuple<>, filter_evtcontext< In... >, Traits_ >
 
template<typename T >
using OutputHandle = details::OutputHandle_t< Traits_, details::remove_optional_t< T > >
 

Private Attributes

std::vector< OutputHandle< Out > > m_outputs
 
Gaudi::Property< std::vector< DataObjID > > m_outputLocations
 

Detailed Description

template<typename Out, typename... In, typename Traits_>
class Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >

Definition at line 35 of file SplittingTransformer.h.

Member Typedef Documentation

◆ base_class

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

Definition at line 37 of file SplittingTransformer.h.

◆ KeyValue

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

Definition at line 41 of file SplittingTransformer.h.

◆ KeyValues

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

Definition at line 42 of file SplittingTransformer.h.

◆ OutputHandle

template<typename Out , typename... In, typename Traits_ >
template<typename T >
using Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::OutputHandle = details::OutputHandle_t<Traits_, details::remove_optional_t<T> >
private

Definition at line 95 of file SplittingTransformer.h.

Constructor & Destructor Documentation

◆ SplittingTransformer() [1/2]

template<typename Out , typename... In, typename Traits_ >
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::SplittingTransformer ( std::string  name,
ISvcLocator locator,
const RepeatValues_< KeyValue, N > &  inputs,
const KeyValues outputs 
)
inline

Definition at line 44 of file SplittingTransformer.h.

46  : base_class( std::move( name ), locator, inputs )
48  this, outputs.first, details::to_DataObjID( outputs.second ),
49  [this]( Gaudi::Details::PropertyBase& ) {
50  this->m_outputs =
51  details::make_vector_of_handles<decltype( this->m_outputs )>( this, m_outputLocations );
52  if constexpr ( details::is_optional_v<Out> ) { // handle constructor does not (yet) allow to
53  // set optional flag... so
54  // do it explicitly here...
55  std::for_each( this->m_outputs.begin(), this->m_outputs.end(),
56  []( auto& h ) { h.setOptional( true ); } );
57  }
58  },

◆ SplittingTransformer() [2/2]

template<typename Out , typename... In, typename Traits_ >
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::SplittingTransformer ( std::string  name,
ISvcLocator locator,
const KeyValue input,
const KeyValues output 
)
inline

Definition at line 61 of file SplittingTransformer.h.

62  : SplittingTransformer( std::move( name ), locator, std::forward_as_tuple( input ), output ) {
63  static_assert( N == 1, "single input argument requires single input signature" );
64  }

Member Function Documentation

◆ execute()

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

Definition at line 71 of file SplittingTransformer.h.

71  {
72  try {
73  // TODO:FIXME: how does operator() know the number and order of expected outputs?
74  auto out = details::filter_evtcontext_t<In...>::apply( *this, this->m_inputs );
75  if ( out.size() != m_outputs.size() ) {
76  throw GaudiException( "Error during transform: expected " + std::to_string( m_outputs.size() ) +
77  " containers, got " + std::to_string( out.size() ) + " instead",
78  this->name(), StatusCode::FAILURE );
79  }
80  for ( unsigned i = 0; i != out.size(); ++i ) details::put( m_outputs[i], std::move( out[i] ) );
82  } catch ( GaudiException& e ) {
83  if ( e.code().isFailure() ) this->error() << e.tag() << " : " << e.message() << endmsg;
84  return e.code();
85  }
86  }

◆ operator()()

template<typename Out , typename... In, typename Traits_ >
virtual vector_of_<Out> Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::operator() ( const In &  ...) const
pure virtual

◆ outputLocation()

template<typename Out , typename... In, typename Traits_ >
const std::string& Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::outputLocation ( unsigned int  n) const
inline

Definition at line 67 of file SplittingTransformer.h.

67 { return m_outputLocations.value()[n].key(); }

◆ outputLocationSize()

template<typename Out , typename... In, typename Traits_ >
unsigned int Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::outputLocationSize ( ) const
inline

Definition at line 68 of file SplittingTransformer.h.

68 { return m_outputLocations.value().size(); }

Member Data Documentation

◆ m_outputLocations

template<typename Out , typename... In, typename Traits_ >
Gaudi::Property<std::vector<DataObjID> > Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::m_outputLocations
private

Definition at line 97 of file SplittingTransformer.h.

◆ m_outputs

template<typename Out , typename... In, typename Traits_ >
std::vector<OutputHandle<Out> > Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::m_outputs
private

Definition at line 96 of file SplittingTransformer.h.

◆ N

template<typename Out , typename... In, typename Traits_ >
constexpr static std::size_t Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::N = base_class::N_in
staticconstexpr

Definition at line 40 of file SplittingTransformer.h.


The documentation for this class was generated from the following file:
Gaudi::Details::PropertyBase
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: PropertyBase.h:35
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::m_outputs
std::vector< OutputHandle< Out > > m_outputs
Definition: SplittingTransformer.h:96
std::move
T move(T... args)
std::vector::size
T size(T... args)
GaudiException
Definition: GaudiException.h:31
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::SplittingTransformer
SplittingTransformer(std::string name, ISvcLocator *locator, const RepeatValues_< KeyValue, N > &inputs, const KeyValues &outputs)
Definition: SplittingTransformer.h:44
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::tagged_bool_ns::tagged_bool
Definition: TaggedBool.h:16
Gaudi::Property::value
const ValueType & value() const
Definition: Property.h:239
std::to_string
T to_string(T... args)
Gaudi::Functional::details::filter_evtcontext_t::apply
static auto apply(const Algorithm &algo, Handles &handles)
Definition: details.h:466
Gaudi::Functional::FilterDecision::PASSED
@ PASSED
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::m_outputLocations
Gaudi::Property< std::vector< DataObjID > > m_outputLocations
Definition: SplittingTransformer.h:97
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::forward_as_tuple
T forward_as_tuple(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
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::base_class
details::DataHandleMixin< std::tuple<>, filter_evtcontext< In... >, Traits_ > base_class
Definition: SplittingTransformer.h:37
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
Gaudi::Functional::details::SplittingTransformer< vector_of_< Out >(const In &...), Traits_, true >::N
constexpr static std::size_t N
Definition: SplittingTransformer.h:40
Gaudi::Functional::details::put
auto put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Definition: details.h:169
PrepareBase.out
out
Definition: PrepareBase.py:20