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// SPDX-FileCopyrightText: Copyright (C) 2021 Tobias Hienzsch
3
4#ifndef TETL_COMPARE_PARTIAL_ORDERING_HPP
5#define TETL_COMPARE_PARTIAL_ORDERING_HPP
6
7#include <etl/_compare/detail.hpp>
8#include <etl/_cstddef/nullptr_t.hpp>
9
10namespace etl {
11
12/// \ingroup compare
14 static partial_ordering const less;
18
19 friend constexpr auto operator==(partial_ordering v, nullptr_t) noexcept -> bool
20 {
21 return v._isOrdered and v._value == 0;
22 }
23
24 friend constexpr auto operator==(partial_ordering v, partial_ordering w) noexcept -> bool = default;
25
26 friend constexpr auto operator<(partial_ordering v, nullptr_t) noexcept -> bool
27 {
28 return v._isOrdered and v._value < 0;
29 }
30
31 friend constexpr auto operator>(partial_ordering v, nullptr_t) noexcept -> bool
32 {
33 return v._isOrdered and v._value > 0;
34 }
35
36 friend constexpr auto operator<=(partial_ordering v, nullptr_t) noexcept -> bool
37 {
38 return v._isOrdered and v._value <= 0;
39 }
40
41 friend constexpr auto operator>=(partial_ordering v, nullptr_t) noexcept -> bool
42 {
43 return v._isOrdered and v._value >= 0;
44 }
45
46 friend constexpr auto operator<(nullptr_t, partial_ordering v) noexcept -> bool
47 {
48 return v._isOrdered and 0 < v._value;
49 }
50
51 friend constexpr auto operator>(nullptr_t, partial_ordering v) noexcept -> bool
52 {
53 return v._isOrdered and 0 > v._value;
54 }
55
56 friend constexpr auto operator<=(nullptr_t, partial_ordering v) noexcept -> bool
57 {
58 return v._isOrdered and 0 <= v._value;
59 }
60
61 friend constexpr auto operator>=(nullptr_t, partial_ordering v) noexcept -> bool
62 {
63 return v._isOrdered and 0 >= v._value;
64 }
65
66 friend constexpr auto operator<=>(partial_ordering v, nullptr_t) noexcept -> partial_ordering
67 {
68 return v;
69 }
70
71 friend constexpr auto operator<=>(nullptr_t, partial_ordering v) noexcept -> partial_ordering
72 {
73 return v < nullptr ? partial_ordering::greater : (v > nullptr ? partial_ordering::less : v);
74 }
75
76private:
77 constexpr explicit partial_ordering(detail::order_result v) noexcept
78 : _value{static_cast<int8_t>(v)}
79 , _isOrdered{true}
80 {
81 }
82
83 constexpr explicit partial_ordering(detail::compare_result v) noexcept
84 : _value{static_cast<int8_t>(v)}
85 , _isOrdered{false}
86 {
87 }
88
89 int8_t _value;
90 bool _isOrdered;
91};
92
93inline constexpr partial_ordering partial_ordering::less{detail::order_result::less};
94inline constexpr partial_ordering partial_ordering::equivalent{detail::order_result::equal};
95inline constexpr partial_ordering partial_ordering::greater{detail::order_result::greater};
96inline constexpr partial_ordering partial_ordering::unordered{detail::compare_result::unordered};
97
98} // namespace etl
99
100#endif // TETL_COMPARE_PARTIAL_ORDERING_HPP
Definition adjacent_find.hpp:9
Definition partial_ordering.hpp:13
friend constexpr auto operator>=(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:61
friend constexpr auto operator<=(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:56
friend constexpr auto operator==(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:19
friend constexpr auto operator<(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:46
static partial_ordering const unordered
Definition partial_ordering.hpp:17
static partial_ordering const equivalent
Definition partial_ordering.hpp:15
friend constexpr auto operator>=(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:41
static partial_ordering const greater
Definition partial_ordering.hpp:16
friend constexpr auto operator>(nullptr_t, partial_ordering v) noexcept -> bool
Definition partial_ordering.hpp:51
friend constexpr auto operator<=>(partial_ordering v, nullptr_t) noexcept -> partial_ordering
Definition partial_ordering.hpp:66
friend constexpr auto operator<=(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:36
friend constexpr auto operator<(partial_ordering v, nullptr_t) noexcept -> bool
Definition partial_ordering.hpp:26
friend constexpr auto operator<=>(nullptr_t, partial_ordering v) noexcept -> partial_ordering
Definition partial_ordering.hpp:71
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:31
static partial_ordering const less
Definition partial_ordering.hpp:14