Iros
Loading...
Searching...
No Matches
relation.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/function/invoke.h
"
4
5
namespace
di::concepts
{
6
template
<
typename
F
,
typename
... Args>
7
concept
Predicate
=
InvocableTo
<F, bool, Args...>;
8
9
template
<
typename
R,
typename
T,
typename
U>
10
concept
Relation
=
Predicate<R, T, T>
&&
Predicate<R, U, U>
&&
Predicate<R, T, U>
&&
Predicate<R, U, T>
;
11
12
template
<
typename
R,
typename
T,
typename
U>
13
concept
EquivalenceRelation
=
Relation<R, T, U>
;
14
15
namespace
detail
{
16
template
<
typename
Cat>
17
concept
StrictWeakOrderCategory
=
SameAs<Cat, strong_ordering>
||
SameAs<Cat, weak_ordering>
;
18
19
template
<
typename
Cat>
20
concept
ComparisonCategory
=
21
SameAs<Cat, strong_ordering>
||
SameAs<Cat, weak_ordering>
||
SameAs<Cat, partial_ordering>
;
22
23
template
<
typename
R,
typename
T,
typename
U>
24
concept
InvocableToStrictWeakOrder
=
Invocable<R, T, U>
&&
StrictWeakOrderCategory<meta::InvokeResult<R, T, U>
>;
25
26
template
<
typename
R,
typename
T,
typename
U>
27
concept
InvocableToComparisonCategory
=
Invocable<R, T, U>
&&
ComparisonCategory<meta::InvokeResult<R, T, U>
>;
28
}
29
30
template
<
typename
R,
typename
T,
typename
U = T>
31
concept
StrictWeakOrder
=
detail::InvocableToStrictWeakOrder<R, T, T>
&&
detail::InvocableToStrictWeakOrder<R, T, U>
&&
32
detail::InvocableToStrictWeakOrder<R, U, T>
&&
detail::InvocableToStrictWeakOrder<R, U, U>
;
33
34
template
<
typename
R,
typename
T,
typename
U = T>
35
concept
StrictPartialOrder
=
36
detail::InvocableToComparisonCategory<R, T, T>
&&
detail::InvocableToComparisonCategory<R, T, U>
&&
37
detail::InvocableToComparisonCategory<R, U, T>
&&
detail::InvocableToComparisonCategory<R, U, U>
;
38
}
di::concepts::EquivalenceRelation
Definition
relation.h:13
di::concepts::InvocableTo
Definition
invoke.h:69
di::concepts::Invocable
Definition
invoke.h:58
di::concepts::Predicate
Definition
relation.h:7
di::concepts::Relation
Definition
relation.h:10
di::concepts::SameAs
Definition
core.h:114
di::concepts::StrictPartialOrder
Definition
relation.h:35
di::concepts::StrictWeakOrder
Definition
relation.h:31
di::concepts::detail::ComparisonCategory
Definition
relation.h:20
di::concepts::detail::InvocableToComparisonCategory
Definition
relation.h:27
di::concepts::detail::InvocableToStrictWeakOrder
Definition
relation.h:24
di::concepts::detail::StrictWeakOrderCategory
Definition
relation.h:17
invoke.h
di::concepts::detail
Definition
impl.h:7
di::concepts
Definition
any_storable.h:9
di::container::view::detail::F
concept F
Definition
zip_transform.h:12
libs
di
include
di
meta
relation.h
Generated by
1.13.0