1 #ifndef SCALAR_TRANSFORMER_H 2 #define SCALAR_TRANSFORMER_H 12 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
14 template <
typename ScalarOp,
typename Out,
typename... In,
typename Traits_>
19 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
29 out.reserve( inrange.size() );
30 auto& scalar = scalarOp();
31 for (
const auto&& tuple : inrange ) {
43 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
45 template <
typename ScalarOp,
typename... Out,
typename... In,
typename Traits_>
51 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
62 [sz = inrange.size()](
auto&&... o ) {
63 #if __cplusplus < 201703L 66 ( o.reserve( sz ), ... );
70 auto& scalar = scalarOp();
71 for (
const auto&& indata : inrange ) {
73 [&scalar, &indata](
auto&... out ) {
79 [&out...](
auto&& outdata ) {
81 [&out...]( auto&&... outdata1 ) {
82 #if __cplusplus < 201703L
83 (void)std::initializer_list<int>{
84 ( details::insert( out, std::forward<decltype( outdata1 )>( outdata1 ) ), 0 )...};
86 ( details::insert( out, std::forward<decltype( outdata1 )>( outdata1 ) ), ... );
constexpr struct Gaudi::Functional::details::insert_t insert
class MergingTransformer< Out(const vector_of_const_< In > void
decltype(auto) constexpr apply(F &&f, Tuple &&t) noexcept(noexcept( detail::apply_impl(std::forward< F >(f), std::forward< Tuple >(t), std::make_index_sequence< std::tuple_size< std::remove_reference_t< Tuple >>::value >{})))
constexpr struct Gaudi::Functional::details::deref_t deref
constexpr struct Gaudi::Functional::details::invoke_optionally_t invoke_optionally
constexpr void applyPostProcessing(const Fun &, Container &, Args...)
struct[[deprecated("use MergingTransformer instead")]] 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.