1 #ifndef SCALAR_TRANSFORMER_H 2 #define SCALAR_TRANSFORMER_H 7 namespace Gaudi {
namespace Functional {
10 template <
typename ScalarOp,
11 typename TransformerSignature,
13 template <
typename ScalarOp,
typename Out,
typename... In,
typename Traits_>
18 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>(*this); }
24 inline decltype(
auto) getScalar( const
Tuple & t,
26 std::index_sequence<I...> )
const 40 out.reserve(inrange.size());
41 auto & scalar = scalarOp();
42 for (
const auto && i : inrange )
43 {
details::insert( out, getScalar( i, scalar, std::index_sequence_for<In...>{} ) ); }
51 template <
typename ScalarOp,
52 typename TransformerSignature,
54 template <
typename ScalarOp,
typename... Out,
typename... In,
typename Traits_>
60 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>(*this); }
68 std::index_sequence<I...> )
const 75 inline decltype(
auto) getScalar( const
Tuple & t,
77 std::index_sequence<I...> )
const 83 template<
typename InTuple,
typename OutTuple,
std::size_t... I >
84 void insert( InTuple && in, OutTuple & out, std::index_sequence<I...> )
const 100 reserve( out, inrange.size(), std::index_sequence_for<Out...>{} );
101 auto & scalar = scalarOp();
102 for (
const auto && i : inrange )
104 insert( getScalar( i, scalar, std::index_sequence_for<In...>{} ), out,
105 std::index_sequence_for<Out...>{} );
constexpr struct Gaudi::Functional::details::insert_t insert
constexpr struct Gaudi::Functional::details::deref_t deref
class MergingTransformer< Out(const vector_of_const_< In > Traits_
decltype(auto) const_range(Args &&...args)
Zips multiple containers together to form a single const range.
Helper functions to set/get the application return code.