xtd 0.2.0
comparison_operators.hpp
Go to the documentation of this file.
1
4#pragma once
5#define __XTD_STD_INTERNAL__
6#include "../internal/__xtd_std_version.hpp"
7#undef __XTD_STD_INTERNAL__
8#include <compare>
9
11namespace xtd {
13 namespace extensions {
30 template<class type_t, class comparable_t>
32 public:
34
40 friend bool operator <(const type_t& lhs, const type_t& rhs) noexcept {
41 auto rhs_ptr = &rhs;
42 return dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) < 0;
43 }
44
49 friend bool operator <=(const type_t& lhs, const type_t& rhs) noexcept {
50 auto rhs_ptr = &rhs;
51 return dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) <= 0;
52 }
53
58 friend bool operator >(const type_t& lhs, const type_t& rhs) noexcept {
59 auto rhs_ptr = &rhs;
60 return dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) > 0;
61 }
62
67 friend bool operator >=(const type_t& lhs, const type_t& rhs) noexcept {
68 auto rhs_ptr = &rhs;
69 return dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) >= 0;
70 }
71
72#if defined(__xtd__cpp_lib_three_way_comparison)
80 friend std::strong_ordering operator <=>(const type_t& lhs, const type_t& rhs) noexcept {
81 auto rhs_ptr = &rhs;
82 if (dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) < 0) return std::strong_ordering::less;
83 if (dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) > 0) return std::strong_ordering::greater;
84 if (dynamic_cast<const type_t*>(rhs_ptr) && lhs.compare_to(static_cast<const type_t&>(rhs)) == 0) return std::strong_ordering::equivalent;
85 return std::strong_ordering::less;
86 }
87#endif
89
90 private:
91 friend comparable_t;
92 comparison_operators() = default;
93 };
94 }
95}
Internal comparable operators definition.
Definition comparison_operators.hpp:31
friend std::strong_ordering operator<=>(const type_t &lhs, const type_t &rhs) noexcept
Three-way comparison operator with specidied lhs ans rhs values.
Definition comparison_operators.hpp:80
friend bool operator<(const type_t &lhs, const type_t &rhs) noexcept
Less than comparison operator with specidied lhs ans rhs values.
Definition comparison_operators.hpp:40
friend bool operator>=(const type_t &lhs, const type_t &rhs) noexcept
Less than comparison operator with specidied lhs ans rhs values.
Definition comparison_operators.hpp:67
friend bool operator<=(const type_t &lhs, const type_t &rhs) noexcept
Less than or equal to comparison operator with specidied lhs ans rhs values.
Definition comparison_operators.hpp:49
friend bool operator>(const type_t &lhs, const type_t &rhs) noexcept
Greater than or equal to comparison operator with specidied lhs ans rhs values.
Definition comparison_operators.hpp:58
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10