tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
partial_ordering.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_COMPARE_PARTIAL_ORDERING_HPP
4#define TETL_COMPARE_PARTIAL_ORDERING_HPP
5
8
9namespace etl {
10
12struct partial_ordering {
13 static partial_ordering const less;
14 static partial_ordering const equivalent;
15 static partial_ordering const greater;
16 static partial_ordering const unordered;
17
18 friend constexpr auto operator==(partial_ordering v, nullptr_t) noexcept -> bool
19 {
20 return v._isOrdered and v._value == 0;
21 }
22
23 friend constexpr auto operator==(partial_ordering v, partial_ordering w) noexcept -> bool = default;
24
25 friend constexpr auto operator<(partial_ordering v, nullptr_t) noexcept -> bool
26 {
27 return v._isOrdered and v._value < 0;
28 }
29
30 friend constexpr auto operator>(partial_ordering v, nullptr_t) noexcept -> bool
31 {
32 return v._isOrdered and v._value > 0;
33 }
34
35 friend constexpr auto operator<=(partial_ordering v, nullptr_t) noexcept -> bool
36 {
37 return v._isOrdered and v._value <= 0;
38 }
39
40 friend constexpr auto operator>=(partial_ordering v, nullptr_t) noexcept -> bool
41 {
42 return v._isOrdered and v._value >= 0;
43 }
44
45 friend constexpr auto operator<(nullptr_t, partial_ordering v) noexcept -> bool
46 {
47 return v._isOrdered and 0 < v._value;
48 }
49
50 friend constexpr auto operator>(nullptr_t, partial_ordering v) noexcept -> bool
51 {
52 return v._isOrdered and 0 > v._value;
53 }
54
55 friend constexpr auto operator<=(nullptr_t, partial_ordering v) noexcept -> bool
56 {
57 return v._isOrdered and 0 <= v._value;
58 }
59
60 friend constexpr auto operator>=(nullptr_t, partial_ordering v) noexcept -> bool
61 {
62 return v._isOrdered and 0 >= v._value;
63 }
64
65 friend constexpr auto operator<=>(partial_ordering v, nullptr_t) noexcept -> partial_ordering { return v; }
66
67 friend constexpr auto operator<=>(nullptr_t, partial_ordering v) noexcept -> partial_ordering
68 {
69 return v < nullptr ? partial_ordering::greater : (v > nullptr ? partial_ordering::less : v);
70 }
71
72private:
73 constexpr explicit partial_ordering(detail::order_result v) noexcept
74 : _value{static_cast<int8_t>(v)}
75 , _isOrdered{true}
76 {
77 }
78
79 constexpr explicit partial_ordering(detail::compare_result v) noexcept
80 : _value{static_cast<int8_t>(v)}
81 , _isOrdered{false}
82 {
83 }
84
85 int8_t _value;
86 bool _isOrdered;
87};
88
89inline constexpr partial_ordering partial_ordering::less{detail::order_result::less};
90inline constexpr partial_ordering partial_ordering::equivalent{detail::order_result::equal};
91inline constexpr partial_ordering partial_ordering::greater{detail::order_result::greater};
92inline constexpr partial_ordering partial_ordering::unordered{detail::compare_result::unordered};
93
94} // namespace etl
95
96#endif // TETL_COMPARE_PARTIAL_ORDERING_HPP
Definition adjacent_find.hpp:8
TETL_BUILTIN_INT8 int8_t
Signed integer type with width of exactly 8 bits.
Definition int_t.hpp:11
decltype(nullptr) nullptr_t
etl::nullptr_t is the type of the null pointer literal, nullptr. It is a distinct type that is not it...
Definition nullptr_t.hpp:13
Definition partial_ordering.hpp:12
friend constexpr auto operator>=(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:60
friend constexpr auto operator<=(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:55
friend constexpr auto operator==(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:18
friend constexpr auto operator<(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:45
static partial_ordering const unordered
Definition partial_ordering.hpp:16
static partial_ordering const equivalent
Definition partial_ordering.hpp:14
friend constexpr auto operator>=(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:40
static partial_ordering const greater
Definition partial_ordering.hpp:15
friend constexpr auto operator>(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:50
friend constexpr auto operator<=>(partial_ordering v, nullptr_t) noexcept -> partial_ordering
Definition partial_ordering.hpp:65
friend constexpr auto operator<=(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:35
friend constexpr auto operator<(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:25
friend constexpr auto operator<=>(nullptr_t, partial_ordering v) noexcept -> partial_ordering
Definition partial_ordering.hpp:67
friend constexpr auto operator==(partial_ordering v, partial_ordering w) noexcept -> bool=default
friend constexpr auto operator>(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:30
static partial_ordering const less
Definition partial_ordering.hpp:13