Iros
Loading...
Searching...
No Matches
sequence.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/concepts/prelude.h
"
4
#include "
di/container/meta/prelude.h
"
5
#include "
di/function/curry_back.h
"
6
#include "
di/function/invoke.h
"
7
#include "
di/meta/language.h
"
8
#include "
di/meta/vocab.h
"
9
#include "
di/util/create.h
"
10
#include "
di/vocab/expected/prelude.h
"
11
12
namespace
di::container
{
13
namespace
detail
{
14
struct
SequenceFunction
{
15
template
<concepts::ViewableContainer Con,
typename
F,
typename
T = meta::ContainerReference<Con>,
16
typename
R = meta::InvokeResult<F, T>,
typename
G = meta::LikeExpected<R,
void
>>
17
constexpr
auto
operator()
(Con&&
container
, F
function
)
const
-> G {
18
auto
view
=
view::all
(util::forward<Con>(
container
));
19
for
(T value :
view
) {
20
if
constexpr
(
concepts::Expected<R>
&& !
concepts::LanguageVoid<meta::ExpectedError<R>
>) {
21
auto
result =
function::invoke
(
function
, util::forward<T>(value));
22
if
(!result) {
23
return
G {
unexpect
, util::move(result).error() };
24
}
25
}
else
{
26
function::invoke_r<void>
(
function
, util::forward<T>(value));
27
}
28
}
29
return
util::create<G>
();
30
}
31
};
32
}
33
34
constexpr
inline
auto
sequence
=
function::curry_back
(
detail::SequenceFunction
{},
meta::c_<2ZU>
);
35
}
36
37
namespace
di
{
38
using
container::sequence
;
39
}
di::concepts::Expected
Definition
vocab.h:30
di::concepts::LanguageVoid
Definition
core.h:128
create.h
curry_back.h
prelude.h
prelude.h
prelude.h
invoke.h
language.h
di::container::detail::detail
Definition
hash_write.h:68
di::container::view
Definition
adjacent.h:8
di::container::view::all
constexpr auto all
Definition
all.h:35
di::container
Definition
sequence.h:12
di::container::sequence
constexpr auto sequence
Definition
sequence.h:34
di::function
Definition
as_bool.h:8
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::function::invoke_r
constexpr auto invoke_r
Definition
invoke.h:103
di::function::curry_back
constexpr auto curry_back
Definition
curry_back.h:141
di::meta::c_
constexpr auto c_
A value of type Constexpr<val>.
Definition
constexpr.h:252
di::util::create
constexpr auto create(Args &&... args)
Definition
create.h:21
di
Definition
zstring_parser.h:9
di::unexpect
constexpr auto unexpect
Definition
unexpect.h:8
di::container::detail::SequenceFunction
Definition
sequence.h:14
di::container::detail::SequenceFunction::operator()
constexpr auto operator()(Con &&container, F function) const -> G
Definition
sequence.h:17
vocab.h
libs
di
include
di
container
action
sequence.h
Generated by
1.13.0