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