Iros
 
Loading...
Searching...
No Matches
partial_ordering.h
Go to the documentation of this file.
1#pragma once
2
4
5#ifndef DI_NO_USE_STD
6#include <compare>
7#else
8namespace std {
9class partial_ordering {
10public:
11 static partial_ordering const less;
12 static partial_ordering const equivalent;
13 static partial_ordering const greater;
14 static partial_ordering const unordered;
15
16 constexpr friend auto operator==(partial_ordering v, partial_ordering w) -> bool = default;
17 constexpr friend auto operator==(partial_ordering v, int) -> bool { return v.m_value == 0; }
18
19 constexpr friend auto operator<(partial_ordering v, int) -> bool { return v.m_value < 0; }
20 constexpr friend auto operator<(int, partial_ordering v) -> bool { return v.m_value == 1; }
21
22 constexpr friend auto operator<=(partial_ordering v, int) -> bool { return v == 0 || v < 0; }
23 constexpr friend auto operator<=(int, partial_ordering v) -> bool { return v == 0 || 0 < v; }
24
25 constexpr friend auto operator>(partial_ordering v, int) -> bool { return 0 < v; }
26 constexpr friend auto operator>(int, partial_ordering v) -> bool { return v < 0; }
27
28 constexpr friend auto operator>=(partial_ordering v, int) -> bool { return 0 <= v; }
29 constexpr friend auto operator>=(int, partial_ordering v) -> bool { return v <= 0; }
30
31 constexpr friend auto operator<=>(partial_ordering v, int) -> partial_ordering { return v; }
32 constexpr friend auto operator<=>(int, partial_ordering v) -> partial_ordering {
33 return v.m_value == 2 ? v : partial_ordering(char(-v.m_value));
34 }
35
36private:
37 friend class strong_ordering;
38 friend class weak_ordering;
39
40 explicit constexpr partial_ordering(char value) : m_value(value) {}
41 explicit constexpr partial_ordering(di::types::detail::CompareOutcome value) : m_value(static_cast<char>(value)) {}
42
43 char m_value;
44};
45
46constexpr inline partial_ordering partial_ordering::less(di::types::detail::CompareOutcome::Less);
47constexpr inline partial_ordering partial_ordering::equivalent(di::types::detail::CompareOutcome::Equal);
48constexpr inline partial_ordering partial_ordering::greater(di::types::detail::CompareOutcome::Greater);
49constexpr inline partial_ordering partial_ordering::unordered(di::types::detail::CompareOutcome::Unordered);
50}
51#endif
52
53namespace di::types {
54using std::partial_ordering;
55}
56
57namespace di {
58using types::partial_ordering;
59}
constexpr auto operator==(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b) -> bool
Definition duration.h:108
constexpr auto operator<=>(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b)
Definition duration.h:115
constexpr auto less
Definition less.h:23
constexpr auto value
Definition value.h:34
constexpr auto greater
Definition greater.h:23
CompareOutcome
Definition compare_outcome.h:5
@ Less
Definition compare_outcome.h:5
@ Unordered
Definition compare_outcome.h:5
@ Greater
Definition compare_outcome.h:5
@ Equal
Definition compare_outcome.h:5
Definition method.h:5
Definition zstring_parser.h:9
Definition enable_generate_structed_bindings.h:46