Range-v3
Range algorithms, views, and actions for the Standard Library
ranges::inner_product_fn Struct Reference

Public Member Functions

template<typename I1 , typename S1 , typename I2 , typename S2 , typename T , typename BOp1 = plus, typename BOp2 = multiplies, typename P1 = identity, typename P2 = identity>
CPP_TEMPLATE_AUX_0 T (requires sentinel_for< S1, I1 > &&sentinel_for< S2, I2 > &&inner_product_constraints< I1, I2, T, BOp1, BOp2, P1, P2 >) TTT operator()(I1 begin1
 

Public Attributes

CPP_TEMPLATE_AUX_0 S1 I2 begin2
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 bop1 = BOp1{}
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 BOp1 = plus
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 bop2 = BOp2{}
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 BOp2 = multiplies
 
CPP_TEMPLATE_AUX_0 S1 end1
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 end2
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 I1 = iterator_t<Rng1>
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 I2
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 I2Ref
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T init
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 P1 = identity
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 P2
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 proj1 = P1{}
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 proj2
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 Rng2
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 S1
 
CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 T
 

Member Data Documentation

◆ I2

CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 ranges::inner_product_fn::I2
Initial value:
= uncvref_t<I2Ref> > CPP_TEMPLATE_AUX_0 T( requires range<Rng1> &&
inner_product_constraints<I1, I2, T, BOp1, BOp2, P1, P2> )TTT operator()(Rng1 && rng1, I2Ref && begin2, T init, BOp1 bop1 = BOp1{},
BOp2 bop2 = BOp2{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const
{
return (*this)(begin(rng1),
end(rng1),
static_cast<I2Ref &&>(begin2),
std::move(init),
std::move(bop1),
std::move(bop2),
std::move(proj1),
std::move(proj2));
}
template< typename Rng1
#define CPP_TEMPLATE_AUX_0(...)
INTERNAL ONLY.
Definition: concepts.hpp:243
constexpr _begin_::fn begin
Definition: access.hpp:182
constexpr _end_::fn end
Definition: access.hpp:313
constexpr move_fn move
Definition: move.hpp:52
requires(sizeof...(Ts) > 0) using lambda
For creating anonymous Invocables.

◆ P2

CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 ranges::inner_product_fn::P2
Initial value:
= identity > CPP_TEMPLATE_AUX_0 T( requires sentinel_for<S1, I1> &&
inner_product_constraints<I1, I2, T, BOp1, BOp2, P1, P2> )TTT operator()(I1 begin1, S1 end1, I2 begin2, T init, BOp1 bop1 = BOp1{},
BOp2 bop2 = BOp2{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const
{
return (*this)(std::move(begin1),
std::move(end1),
std::move(begin2),
unreachable,
std::move(init),
std::move(bop1),
std::move(bop2),
std::move(proj1),
std::move(proj2));
}
template< typename Rng1

◆ proj2

CPP_TEMPLATE_AUX_0 S1 I2 S2 T BOp1 BOp2 P1 P2 ranges::inner_product_fn::proj2
Initial value:
= P2{}) const
{
for(; begin1 != end1 && begin2 != end2; ++begin1, ++begin2)
init =
invoke(bop1,
init,
invoke(bop2, invoke(proj1, *begin1), invoke(proj2, *begin2)));
return init;
}
template< typename I1
typename Fn::template invoke< Args... > invoke
Evaluate the invocable Fn with the arguments Args.
Definition: meta.hpp:541