Iros
Loading...
Searching...
No Matches
for_each.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/algorithm/in_fun_result.h
"
4
#include "
di/container/concepts/prelude.h
"
5
#include "
di/container/meta/prelude.h
"
6
#include "
di/function/identity.h
"
7
#include "
di/function/invoke.h
"
8
#include "
di/util/reference_wrapper.h
"
9
10
namespace
di::container
{
11
namespace
detail
{
12
struct
ForEachFunction
{
13
template
<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent,
typename
Proj = function::Identity,
14
concepts::IndirectlyUnaryInvocable<meta::Projected<Iter, Proj>> F>
15
constexpr
auto
operator()
(Iter first, Sent last, F f, Proj
proj
= {})
const
->
InFunResult<Iter, F>
{
16
for
(; first != last; ++first) {
17
function::invoke
(f,
function::invoke
(
proj
, *first));
18
}
19
return
{ util::move(first), util::move(f) };
20
}
21
22
template
<concepts::InputContainer Con,
typename
Proj = function::Identity,
23
concepts::IndirectlyUnaryInvocable<meta::Projected<meta::ContainerIterator<Con>, Proj>> F>
24
constexpr
auto
operator()
(Con&&
container
, F f, Proj
proj
= {})
const
25
->
InFunResult
<
meta::BorrowedIterator<Con>
, F> {
26
return
(*
this
)(
container::begin
(
container
),
container::end
(
container
), util::move(f),
util::ref
(
proj
));
27
}
28
};
29
}
30
31
constexpr
inline
auto
for_each
=
detail::ForEachFunction
{};
32
}
33
34
namespace
di
{
35
using
container::for_each
;
36
}
identity.h
in_fun_result.h
prelude.h
prelude.h
invoke.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::for_each
constexpr auto for_each
Definition
for_each.h:31
di::container::end
constexpr auto end
Definition
end.h:47
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::meta::BorrowedIterator
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition
borrowed_iterator.h:11
di::util::ref
constexpr auto ref
Definition
reference_wrapper.h:98
di
Definition
zstring_parser.h:9
di::proj
constexpr auto proj
Definition
proj.h:59
reference_wrapper.h
di::container::InFunResult
Definition
in_fun_result.h:8
di::container::detail::ForEachFunction
Definition
for_each.h:12
di::container::detail::ForEachFunction::operator()
constexpr auto operator()(Iter first, Sent last, F f, Proj proj={}) const -> InFunResult< Iter, F >
Definition
for_each.h:15
di::container::detail::ForEachFunction::operator()
constexpr auto operator()(Con &&container, F f, Proj proj={}) const -> InFunResult< meta::BorrowedIterator< Con >, F >
Definition
for_each.h:24
libs
di
include
di
container
algorithm
for_each.h
Generated by
1.13.0