Iros
Loading...
Searching...
No Matches
product.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/algorithm/fold_left.h
"
4
#include "
di/function/multiplies.h
"
5
#include "
di/function/pipeline.h
"
6
7
namespace
di::container
{
8
namespace
detail
{
9
struct
ProductFunction
:
function::pipeline::EnablePipeline
{
10
template
<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent,
typename
T = meta::IteratorValue<Iter>>
11
requires
(
concepts::IndirectlyBinaryLeftFoldable<function::Multiplies, T, Iter>
&&
requires
{ T(1); })
12
constexpr
auto
operator
()(Iter first, Sent last)
const
{
13
return
container::fold_left
(util::move(first), util::move(last), T(1),
function::multiplies
);
14
}
15
16
template
<concepts::InputContainer Con,
typename
T = meta::ContainerValue<Con>>
17
requires
(
concepts::IndirectlyBinaryLeftFoldable<function::Multiplies, T, meta::ContainerIterator<Con>
> &&
18
requires
{ T(1); })
19
constexpr
auto
operator
()(Con&&
container
)
const
{
20
return
(*
this
)(
container::begin
(
container
),
container::end
(
container
));
21
}
22
};
23
}
24
25
constexpr
inline
auto
product
=
detail::ProductFunction
{};
26
}
27
28
namespace
di
{
29
using
container::product
;
30
}
di::concepts::IndirectlyBinaryLeftFoldable
Definition
indirectly_binary_left_foldable.h:18
fold_left.h
multiplies.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::product
constexpr auto product
Definition
product.h:25
di::container::fold_left
constexpr auto fold_left
Definition
fold_left.h:24
di::container::end
constexpr auto end
Definition
end.h:47
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::function::multiplies
constexpr auto multiplies
Definition
multiplies.h:15
di
Definition
zstring_parser.h:9
pipeline.h
di::container::detail::ProductFunction
Definition
product.h:9
di::function::pipeline::EnablePipeline
Definition
pipeable.h:8
libs
di
include
di
container
algorithm
product.h
Generated by
1.13.0