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