Iros
Loading...
Searching...
No Matches
cycle.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/view/cycle_view.h
"
4
#include "
di/function/pipeline.h
"
5
6
namespace
di::container::view
{
7
namespace
detail
{
8
struct
CycleFunction
;
9
10
template
<
typename
Con>
11
concept
CustomCycle
=
concepts::TagInvocable<CycleFunction, Con>
;
12
13
template
<
typename
Con>
14
concept
ViewCycle
=
requires
(Con&&
container
) {
CycleView
{ util::forward<Con>(
container
) }; };
15
16
struct
CycleFunction
:
function::pipeline::EnablePipeline
{
17
template
<concepts::ViewableContainer Con>
18
requires
(
CustomCycle<Con>
||
ViewCycle<Con>
)
19
constexpr
auto
operator
()(Con&&
container
)
const
->
concepts::View
auto
{
20
if
constexpr
(
CustomCycle<Con>
) {
21
return
function::tag_invoke
(*
this
, util::forward<Con>(
container
));
22
}
else
{
23
return
CycleView
{ util::forward<Con>(
container
) };
24
}
25
}
26
};
27
28
}
29
30
constexpr
inline
auto
cycle
=
detail::CycleFunction
{};
31
}
32
33
namespace
di
{
34
using
view::cycle;
35
}
di::container::CycleView
Definition
cycle_view.h:17
di::concepts::TagInvocable
Definition
tag_invoke.h:33
di::concepts::View
Definition
view.h:10
di::container::view::detail::CustomCycle
Definition
cycle.h:11
di::container::view::detail::ViewCycle
Definition
cycle.h:14
cycle_view.h
di::container::view::detail
Definition
adjacent.h:9
di::container::view
Definition
adjacent.h:8
di::container::view::cycle
constexpr auto cycle
Definition
cycle.h:30
di::container
Definition
sequence.h:12
di::function::tag_invoke_ns::tag_invoke
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition
tag_invoke.h:22
di
Definition
zstring_parser.h:9
pipeline.h
di::container::view::detail::CycleFunction
Definition
cycle.h:16
di::function::pipeline::EnablePipeline
Definition
pipeable.h:8
libs
di
include
di
container
view
cycle.h
Generated by
1.13.0