The Gaudi Framework  v41r0 (bdbe7744)
Loading...
Searching...
No Matches
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ > Class Template Reference

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

Inheritance diagram for Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >:
Collaboration diagram for Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >:

Public Types

using KeyValue = LocationSpec::KeyValue
using KeyValues = LocationSpec::KeyValues

Public Member Functions

 DataHandleMixin (std::string name, ISvcLocator *locator, std::tuple<>={}, std::tuple<>={})
 DataHandleMixin (std::string name, ISvcLocator *locator)
 DataHandleMixin (std::string name, ISvcLocator *locator, InputSpecs const &inputs)
 DataHandleMixin (std::string name, ISvcLocator *locator, LegacyInputSpecs const &inputs)
 DataHandleMixin (std::string name, ISvcLocator *locator, OutputSpecs const &outputs)
 DataHandleMixin (std::string name, ISvcLocator *locator, InputSpecs const &inputs, OutputSpecs const &outputs)
 DataHandleMixin (std::string name, ISvcLocator *locator, LegacyInputSpecs const &inputs, OutputSpecs const &outputs)
template<std::size_t N = 0>
requires ( N_input_locations > N )
decltype(auto) inputLocation () const
template<typename T>
requires ( N_input_locations > 0 && !is_event_context_v<T> )
decltype(auto) inputLocation () const
template<std::size_t N = 0>
requires ( N_input_locations > N && location_vector_handle<InputLocationHandle<N>> )
decltype(auto) inputLocation (unsigned int n) const
decltype(auto) inputLocation (unsigned int i, unsigned int j) const
unsigned int inputLocationSize (unsigned int i) const
unsigned int inputLocationSize () const
template<std::size_t N = 0>
requires ( N_out > 0 )
decltype(auto) outputLocation () const
template<typename T>
requires ( N_out > 0 )
decltype(auto) outputLocation () const
template<std::size_t N = 0>
requires ( N_out > N && location_vector_handle<std::tuple_element_t<N, OutputHandles>> )
decltype(auto) outputLocation (unsigned int n) const
unsigned int outputLocationSize () const
template<typename Algorithm>
decltype(auto) invoke (const Algorithm &algo, const EventContext &ctx) const

Static Public Attributes

static constexpr std::size_t N_in = sizeof...( In )
static constexpr std::size_t N_out = sizeof...( Out )

Protected Member Functions

bool isReEntrant () const override

Protected Attributes

InputHandles m_inputs
OutputHandles m_outputs

Private Types

using InputHandles = std::tuple<details::InputHandle_t<Traits_, In>...>
using OutputHandles = std::tuple<details::OutputHandle_t<Traits_, Out>...>
using InputSpecTuple = LocationSpecs_t<In...>
using LegacyInputSpecTuple = TailLocationSpecs_t<In...>
using InputSpecs = details::LocationSpecs<InputSpecTuple>
using LegacyInputSpecs = details::LocationSpecs<LegacyInputSpecTuple>
using OutputSpecTuple = LocationSpecs_t<Out...>
using OutputSpecs = details::LocationSpecs<OutputSpecTuple>
template<std::size_t N>
using InputLocationHandle = std::tuple_element_t<input_handle_index<N>, InputHandles>

Private Member Functions

template<typename IArgs, typename OArgs, std::size_t... I, std::size_t... J>
 DataHandleMixin (std::string name, ISvcLocator *pSvcLocator, const IArgs &inputs, std::index_sequence< I... >, const OArgs &outputs, std::index_sequence< J... >)
template<std::size_t... I>
auto input_location_handles (std::index_sequence< I... >) const

Static Private Member Functions

template<std::size_t... I>
static constexpr bool input_locations_are_vectors (std::index_sequence< I... >)

Static Private Attributes

static constexpr bool starts_with_event_context = first_is_event_context_v<In...>
static constexpr std::size_t input_location_offset = starts_with_event_context ? 1 : 0
static constexpr std::size_t N_input_locations = N_in - input_location_offset
template<std::size_t N>
static constexpr std::size_t input_handle_index = N + input_location_offset
static constexpr bool all_input_locations_are_vectors

Detailed Description

template<typename... Out, typename... In, typename Traits_>
requires ( std::derived_from<BaseClass_t<Traits_>, Algorithm> && !std::disjunction_v<std::is_void<Out>...> )
class Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >

Definition at line 694 of file details.h.

Member Typedef Documentation

◆ InputHandles

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::InputHandles = std::tuple<details::InputHandle_t<Traits_, In>...>
private

Definition at line 711 of file details.h.

◆ InputLocationHandle

template<typename... Out, typename... In, typename Traits_>
template<std::size_t N>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::InputLocationHandle = std::tuple_element_t<input_handle_index<N>, InputHandles>
private

Definition at line 725 of file details.h.

◆ InputSpecs

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::InputSpecs = details::LocationSpecs<InputSpecTuple>
private

Definition at line 715 of file details.h.

◆ InputSpecTuple

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::InputSpecTuple = LocationSpecs_t<In...>
private

Definition at line 713 of file details.h.

◆ KeyValue

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::KeyValue = LocationSpec::KeyValue

Definition at line 739 of file details.h.

◆ KeyValues

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::KeyValues = LocationSpec::KeyValues

Definition at line 740 of file details.h.

◆ LegacyInputSpecs

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::LegacyInputSpecs = details::LocationSpecs<LegacyInputSpecTuple>
private

Definition at line 716 of file details.h.

◆ LegacyInputSpecTuple

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::LegacyInputSpecTuple = TailLocationSpecs_t<In...>
private

Definition at line 714 of file details.h.

◆ OutputHandles

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::OutputHandles = std::tuple<details::OutputHandle_t<Traits_, Out>...>
private

Definition at line 712 of file details.h.

◆ OutputSpecs

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::OutputSpecs = details::LocationSpecs<OutputSpecTuple>
private

Definition at line 718 of file details.h.

◆ OutputSpecTuple

template<typename... Out, typename... In, typename Traits_>
using Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::OutputSpecTuple = LocationSpecs_t<Out...>
private

Definition at line 717 of file details.h.

Constructor & Destructor Documentation

◆ DataHandleMixin() [1/8]

template<typename... Out, typename... In, typename Traits_>
template<typename IArgs, typename OArgs, std::size_t... I, std::size_t... J>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * pSvcLocator,
const IArgs & inputs,
std::index_sequence< I... > ,
const OArgs & outputs,
std::index_sequence< J... >  )
inlineprivate

Definition at line 702 of file details.h.

707 // make sure this algorithm is seen as reentrant by Gaudi
708 this->setProperty( "Cardinality", 0 ).ignore();
709 }
bool PyHelper setProperty(IInterface *p, char *name, char *value)
detail2::BaseClass< Tr, Default >::type BaseClass_t
Definition details.h:490

◆ DataHandleMixin() [2/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator,
std::tuple<> = {},
std::tuple<> = {} )
inline

Definition at line 743 of file details.h.

743 {}, std::tuple<> = {} )
744 requires( N_in == 0 && N_out == 0 )
DataHandleMixin(std::string name, ISvcLocator *pSvcLocator, const IArgs &inputs, std::index_sequence< I... >, const OArgs &outputs, std::index_sequence< J... >)
Definition details.h:702

◆ DataHandleMixin() [3/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator )
inline

◆ DataHandleMixin() [4/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator,
InputSpecs const & inputs )
inline

Definition at line 755 of file details.h.

◆ DataHandleMixin() [5/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator,
LegacyInputSpecs const & inputs )
inline

Definition at line 761 of file details.h.

◆ DataHandleMixin() [6/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator,
OutputSpecs const & outputs )
inline

◆ DataHandleMixin() [7/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator,
InputSpecs const & inputs,
OutputSpecs const & outputs )
inline

Definition at line 773 of file details.h.

775 : DataHandleMixin( std::move( name ), locator, inputs.tuple(), inputs.indices, outputs.tuple(),
776 outputs.indices ) {}

◆ DataHandleMixin() [8/8]

template<typename... Out, typename... In, typename Traits_>
Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::DataHandleMixin ( std::string name,
ISvcLocator * locator,
LegacyInputSpecs const & inputs,
OutputSpecs const & outputs )
inline

Definition at line 778 of file details.h.

781 : DataHandleMixin( std::move( name ), locator, inputs.with_context(), InputSpecs::indices, outputs.tuple(),
782 outputs.indices ) {}

Member Function Documentation

◆ input_location_handles()

template<typename... Out, typename... In, typename Traits_>
template<std::size_t... I>
auto Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::input_location_handles ( std::index_sequence< I... > ) const
inlineprivate

Definition at line 734 of file details.h.

734 {
736 }

◆ input_locations_are_vectors()

template<typename... Out, typename... In, typename Traits_>
template<std::size_t... I>
constexpr bool Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::input_locations_are_vectors ( std::index_sequence< I... > )
inlinestaticconstexprprivate

Definition at line 727 of file details.h.

727 {
729 }

◆ inputLocation() [1/4]

template<typename... Out, typename... In, typename Traits_>
template<typename T>
requires ( N_input_locations > 0 && !is_event_context_v<T> )
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::inputLocation ( ) const
inline

Definition at line 791 of file details.h.

793 {
795 }
auto getKey(const Handle &h) -> decltype(h.objKey())
Definition details.h:677

◆ inputLocation() [2/4]

template<typename... Out, typename... In, typename Traits_>
template<std::size_t N = 0>
requires ( N_input_locations > N )
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::inputLocation ( ) const
inline

Definition at line 785 of file details.h.

787 {
789 }

◆ inputLocation() [3/4]

template<typename... Out, typename... In, typename Traits_>
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::inputLocation ( unsigned int i,
unsigned int j ) const
inline

Definition at line 802 of file details.h.

804 {
806 }
decltype(auto) getKeys(Vectors const &vectors, unsigned int i)
Definition details.h:392

◆ inputLocation() [4/4]

template<typename... Out, typename... In, typename Traits_>
template<std::size_t N = 0>
requires ( N_input_locations > N && location_vector_handle<InputLocationHandle<N>> )
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::inputLocation ( unsigned int n) const
inline

Definition at line 797 of file details.h.

799 {
800 return std::get<input_handle_index<N>>( m_inputs ).at( n ).key();
801 }

◆ inputLocationSize() [1/2]

template<typename... Out, typename... In, typename Traits_>
unsigned int Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::inputLocationSize ( ) const
inline

◆ inputLocationSize() [2/2]

template<typename... Out, typename... In, typename Traits_>
unsigned int Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::inputLocationSize ( unsigned int i) const
inline

Definition at line 807 of file details.h.

809 {
810 auto size = []( const auto& handle ) {
811 if constexpr ( location_vector_handle<std::decay_t<decltype( handle )>> ) {
812 return static_cast<unsigned int>( handle.size() );
813 } else {
814 return 1U;
815 }
816 };
817 return std::apply( [i = i + input_location_offset,
818 size]( const auto&... handles ) { return std::array{ size( handles )... }.at( i ); },
819 m_inputs );
820 }

◆ invoke()

template<typename... Out, typename... In, typename Traits_>
template<typename Algorithm>
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::invoke ( const Algorithm & algo,
const EventContext & ctx ) const
inline

Definition at line 863 of file details.h.

863 {
864 return std::apply(
865 [&]( const auto&... handle ) -> decltype( auto ) { return algo( get( handle, algo, ctx )... ); }, m_inputs );
866 }
auto get(const Handle &handle, const Algo &, const EventContext &) -> decltype(details::deref(handle.get()))
Definition details.h:652

◆ isReEntrant()

template<typename... Out, typename... In, typename Traits_>
bool Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::isReEntrant ( ) const
inlineoverrideprotected

Definition at line 869 of file details.h.

869{ return true; }

◆ outputLocation() [1/3]

template<typename... Out, typename... In, typename Traits_>
template<typename T>
requires ( N_out > 0 )
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::outputLocation ( ) const
inline

Definition at line 843 of file details.h.

◆ outputLocation() [2/3]

template<typename... Out, typename... In, typename Traits_>
template<std::size_t N = 0>
requires ( N_out > 0 )
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::outputLocation ( ) const
inline

Definition at line 837 of file details.h.

839 {
840 return getKey( std::get<N>( m_outputs ) );
841 }

◆ outputLocation() [3/3]

template<typename... Out, typename... In, typename Traits_>
template<std::size_t N = 0>
requires ( N_out > N && location_vector_handle<std::tuple_element_t<N, OutputHandles>> )
decltype(auto) Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::outputLocation ( unsigned int n) const
inline

Definition at line 849 of file details.h.

851 {
852 return std::get<N>( m_outputs ).at( n ).key();
853 }

◆ outputLocationSize()

template<typename... Out, typename... In, typename Traits_>
unsigned int Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::outputLocationSize ( ) const
inline

Definition at line 854 of file details.h.

854 {
856 return std::get<0>( m_outputs ).size();
857 } else {
858 return N_out;
859 }
860 }

Member Data Documentation

◆ all_input_locations_are_vectors

template<typename... Out, typename... In, typename Traits_>
bool Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::all_input_locations_are_vectors
staticconstexprprivate
Initial value:
=
input_locations_are_vectors( std::make_index_sequence<N_input_locations>{} )

Definition at line 730 of file details.h.

◆ input_handle_index

template<typename... Out, typename... In, typename Traits_>
template<std::size_t N>
std::size_t Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::input_handle_index = N + input_location_offset
staticconstexprprivate

Definition at line 723 of file details.h.

◆ input_location_offset

template<typename... Out, typename... In, typename Traits_>
std::size_t Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::input_location_offset = starts_with_event_context ? 1 : 0
staticconstexprprivate

Definition at line 720 of file details.h.

◆ m_inputs

template<typename... Out, typename... In, typename Traits_>
InputHandles Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::m_inputs
protected

Definition at line 870 of file details.h.

◆ m_outputs

template<typename... Out, typename... In, typename Traits_>
OutputHandles Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::m_outputs
protected

Definition at line 871 of file details.h.

◆ N_in

template<typename... Out, typename... In, typename Traits_>
std::size_t Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::N_in = sizeof...( In )
staticconstexpr

Definition at line 697 of file details.h.

◆ N_input_locations

template<typename... Out, typename... In, typename Traits_>
std::size_t Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::N_input_locations = N_in - input_location_offset
staticconstexprprivate

Definition at line 721 of file details.h.

◆ N_out

template<typename... Out, typename... In, typename Traits_>
std::size_t Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::N_out = sizeof...( Out )
staticconstexpr

Definition at line 698 of file details.h.

◆ starts_with_event_context

template<typename... Out, typename... In, typename Traits_>
bool Gaudi::Functional::details::DataHandleMixin< type_list< Out... >, type_list< In... >, Traits_ >::starts_with_event_context = first_is_event_context_v<In...>
staticconstexprprivate

Definition at line 719 of file details.h.


The documentation for this class was generated from the following file:
  • GaudiFunctional/include/Gaudi/Functional/details.h