xtd 1.0.0
Loading...
Searching...
No Matches
basic_string_comparer.hpp
Go to the documentation of this file.
1
4#pragma once
7#include "as.hpp"
8#include "is.hpp"
10#include "basic_string.hpp"
11
13namespace xtd {
29 template<typename char_t>
30 class basic_string_comparer : public xtd::object, public xtd::collections::generic::icomparer<xtd::basic_string<char_t>>, public xtd::collections::generic::iequality_comparer<xtd::basic_string<char_t >> {
31 public:
33
50 [[nodiscard]] static auto current_culture() -> basic_string_comparer {
52 //return create(culture_info::current_culture);
53 }
54
71 [[nodiscard]] static auto current_culture_ignore_case() -> basic_string_comparer {
74 //return create(culture_info::current_culture, true);
75 }
76
77 [[nodiscard]] static auto invariant_culture() -> basic_string_comparer {
80 //return create(culture_info::invariant_culture);
81 }
82
86 //return create(culture_info::invariant_culture, true);
87 }
88
93 [[nodiscard]] static auto ordinal() -> const basic_string_comparer& {
94 static auto result = from_comparison(string_comparison::ordinal);
95 return result;
96 }
97
102 [[nodiscard]] static auto ordinal_ignore_case() -> const basic_string_comparer& {
104 return result;
105 }
106
107
109
122 template<typename object_t>
123 [[nodiscard]] auto compare(const object_t& x, const object_t& y) const -> xtd::int32 {
126 if (is<object>(x) && is<object>(y) && as<object>(x) == as<object>(y)) return 0;
128 }
129
130 [[nodiscard]] auto compare(const char_t* x, const char_t* y) const -> xtd::int32 {
131 if (x == y) return 0;
132 return compare(basic_string<char_t> {x}, basic_string<char_t> {y});
133 }
134 [[nodiscard]] auto compare(const basic_string<char_t>& x, const char_t* y) const -> xtd::int32 {return compare(x, basic_string<char_t> {y});}
135 [[nodiscard]] auto compare(const char_t* x, const basic_string<char_t>& y) const -> xtd::int32 {return compare(basic_string<char_t> {x}, y);}
147 [[nodiscard]] auto compare(const xtd::basic_string<char_t>& x, const xtd::basic_string<char_t>& y) const noexcept -> xtd::int32 override {
149 switch (comparison_) {
152 case string_comparison::ordinal: return x.compare_to(y);
155 case string_comparison::ordinal_ignore_case: return x.to_lower().compare_to(y.to_lower());
156 default: return x.compare_to(y);
157 }
158 }
159
166 [[nodiscard]] auto equals(const object& obj) const noexcept -> bool override {
167 return is<basic_string_comparer>(obj) && reinterpret_cast<const basic_string_comparer&>(obj).comparison_ == comparison_;
168 }
169
175 template<typename object_t>
176 [[nodiscard]] auto equals(const object_t& x, const object_t& y) const -> bool {
177 if (&x == &y) return true;
180 if (is<object>(x) && is<object>(y) && as<object>(x) == as<object>(y)) return 0;
182 }
183
184 [[nodiscard]] auto equals(const char_t* x, const char_t* y) const -> bool {
185 if (x == y) return true;
186 return equals(basic_string<char_t> {x}, basic_string<char_t> {y});
187 }
188 [[nodiscard]] auto equals(const basic_string<char_t>& x, const char_t* y) const -> bool {return equals(x, basic_string<char_t> {y});}
189 [[nodiscard]] auto equals(const char_t* x, const basic_string<char_t>& y) const -> bool {return equals(basic_string<char_t> {x}, y);}
196 [[nodiscard]] auto equals(const xtd::basic_string<char_t>& x, const xtd::basic_string<char_t>& y) const noexcept -> bool override {
197 if (&x == &y) return true;
199 switch (comparison_) {
202 case string_comparison::ordinal: return x.equals(y);
205 case string_comparison::ordinal_ignore_case: return x.to_lower().equals(y.to_lower());
206 default : return x.equals(y);
207 }
208 }
209
215 template<typename object_t>
216 [[nodiscard]] auto get_hash_code(const object_t& obj) const -> xtd::usize {
218 if (is<object>(obj)) return as<object>(obj).get_hash_code();
219 return xtd::hash_code::combine(obj);
220 }
221
222 [[nodiscard]] auto get_hash_code(const char_t* obj) const -> xtd::usize {return get_hash_code(basic_string<char_t> {obj});}
228 [[nodiscard]] auto get_hash_code(const xtd::basic_string<char_t>& obj) const noexcept -> xtd::usize override {
230 switch (comparison_) {
233 case string_comparison::ordinal: return obj.get_hash_code();
236 case string_comparison::ordinal_ignore_case: return obj.to_lower().get_hash_code();
237 default: return obj.get_hash_code();
238 }
239 }
240
241
243
252
254 /*
261 bool is_well_known_culture_aware_comparer(const xtd::collections::generic::iequality_comparer<xtd::basic_string<char_t>>& comparer, xtd::globalization::compare_info& compare_info, xtd::globalization::compare_options& compare_options) {
262 if (xtd::is<>(comparer)) {
263 compare_info = get_compare_info();
264 compare_options = get_compare_options();
265 return true;
266 }
267
268 compare_info = xtd::globalization::compare_info {};
269 compare_options = xtd::globalization::compare_options::none;
270 return false;
271 } */
272
278 [[nodiscard]] static auto is_well_known_ordinal_comparer(const xtd::collections::generic::iequality_comparer<xtd::basic_string<char_t>>& comparer, bool& ignore_case) -> bool {
281 return true;
282 }
283
284 ignore_case = false;
285 return false;
286 }
287
288
289 protected:
291
294 /*
299 basic_string_comparer create(const xtd::globalization::culture_info& culture, bool ignore_case) {
300 return create {culture, ignore_case ? compare_options::ignore_case : compare_options::none};
301 } */
302
304 /*
309 basic_string_comparer create(const xtd::globalization::culture_info& culture, xtd::globalization::compare_options options) {
310 return basic_string_comparer {culture, options};
311 } */
312
316
317
318 private:
325
327 }
329 /*
330 basic_string_comparer(const xtd::globalization::culture_info& culture, xtd::globalization::compare_options options) : culture_ {culture}, options_ {options} {
331 }
332 xtd::globalization::culture_info culture_ = xtd::globalization::culture_info::empty;
333 xtd::globalization::compare_options options_ = xtd::globalization::compare_options::none;
334 */
336 };
337}
Contains xtd::as method.
Contains xtd::basic_string class.
Represents a string comparison operation that uses specific case and culture-based or ordinal compari...
Definition basic_string_comparer.hpp:30
static auto ordinal() -> const basic_string_comparer &
Gets a xtd::basic_string_comparer object that performs a case-sensitive ordinal string comparison.
Definition basic_string_comparer.hpp:93
static auto invariant_culture_ignore_case() -> basic_string_comparer
Definition basic_string_comparer.hpp:83
auto equals(const object_t &x, const object_t &y) const -> bool
When overridden in a derived class, indicates whether two objects are equal.
Definition basic_string_comparer.hpp:176
auto get_hash_code(const xtd::basic_string< char_t > &obj) const noexcept -> xtd::usize override
When overridden in a derived class, gets the hash code for the specified string.
Definition basic_string_comparer.hpp:228
virtual auto get_hash_code() const noexcept -> xtd::usize
Serves as a hash function for a particular type.
auto get_hash_code(const object_t &obj) const -> xtd::usize
When overridden in a derived class, gets the hash code for the specified object.
Definition basic_string_comparer.hpp:216
auto equals(const object &obj) const noexcept -> bool override
Determines whether the specified object is equal to the current object.
Definition basic_string_comparer.hpp:166
auto equals(const xtd::basic_string< char_t > &x, const xtd::basic_string< char_t > &y) const noexcept -> bool override
When overridden in a derived class, indicates whether two strings are equal.
Definition basic_string_comparer.hpp:196
static auto from_comparison(xtd::string_comparison comparison) -> basic_string_comparer
Converts the specified xtd::string_comparison instance to a StringComparer instance.
Definition basic_string_comparer.hpp:249
static auto is_well_known_ordinal_comparer(const xtd::collections::generic::iequality_comparer< xtd::basic_string< char_t > > &comparer, bool &ignore_case) -> bool
Determines whether the specified xtd::collections::generic::iequality_comparer <type_t> is a well-kno...
Definition basic_string_comparer.hpp:278
static auto invariant_culture() -> basic_string_comparer
Definition basic_string_comparer.hpp:77
static auto current_culture_ignore_case() -> basic_string_comparer
Gets a xtd::basic_string_comparer object that performs case-insensitive string comparisons using the ...
Definition basic_string_comparer.hpp:71
auto compare(const object_t &x, const object_t &y) const -> xtd::int32
When overridden in a derived class, compares two objects and returns an indication of their relative ...
Definition basic_string_comparer.hpp:123
basic_string_comparer()=default
Initializes a new instance of the xtd::basic_string_comparer class.
static auto current_culture() -> basic_string_comparer
Gets a xtd::basic_string_comparer object that performs a case-sensitive string comparison using the w...
Definition basic_string_comparer.hpp:50
static auto ordinal_ignore_case() -> const basic_string_comparer &
Gets a xtd::basic_string_comparer object that performs a case-insensitive ordinal string comparison.
Definition basic_string_comparer.hpp:102
auto compare(const xtd::basic_string< char_t > &x, const xtd::basic_string< char_t > &y) const noexcept -> xtd::int32 override
When overridden in a derived class, compares two strings and returns an indication of their relative ...
Definition basic_string_comparer.hpp:147
Represents text as a sequence of character units.
Definition basic_string.hpp:66
Exposes a method that compares two objects.
Definition icomparer.hpp:30
Defines methods to support the comparison of objects for equality.
Definition iequality_comparer.hpp:34
static auto combine(args_t... values) noexcept -> xtd::usize
Combines values into a hash code.
Definition hash_code.hpp:70
static auto throws(xtd::helpers::exception_case exception_case, const source_location &location=source_location::current()) -> void
Throws an exption with specified exception case.
Defines a generalized comparison method that a value type or class implements to create a type-specif...
Definition icomparable.hpp:22
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition iequatable.hpp:23
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:45
virtual auto get_hash_code() const noexcept -> xtd::usize
Serves as a hash function for a particular type.
Contains xtd::collections::generic::icomparer <type_t> interface.
Contains xtd::collections::generic::iequality_comparer <type_t> interface.
xtd::delegate< int32(type_t x, type_t y)> comparison
Represents the method that compares two objects of the same type.
Definition comparison.hpp:33
@ argument
The argument is not valid.
Definition exception_case.hpp:31
@ not_implemented
The method or operation is not implemented.
Definition exception_case.hpp:75
std::int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:25
std::size_t usize
Represents an unsigned size of any object in bytes.
Definition usize.hpp:22
string_comparison
Specifies the culture, case, and sort rules to be used by certain overloads of the xtd::string::compa...
Definition string_comparison.hpp:14
auto as(any_object &o) -> type_t
Casts a type into another type.
Definition __as_any_object.hpp:60
auto is(xtd::any value) -> bool
Checks if the result of an expression is compatible with a given type.
Definition is.hpp:485
@ ordinal
Compare strings using ordinal (binary) sort rules.
Definition string_comparison.hpp:24
@ invariant_culture
Compare strings using culture-sensitive sort rules and the invariant culture.
Definition string_comparison.hpp:20
@ invariant_culture_ignore_case
Compare strings using culture-sensitive sort rules, the invariant culture, and ignoring the case of t...
Definition string_comparison.hpp:22
@ ordinal_ignore_case
Compare strings using ordinal (binary) sort rules and ignoring the case of the strings being compared...
Definition string_comparison.hpp:26
@ current_culture_ignore_case
Compare strings using culture-sensitive sort rules, the current culture, and ignoring the case of the...
Definition string_comparison.hpp:18
@ current_culture
Compare strings using culture-sensitive sort rules and the current culture.
Definition string_comparison.hpp:16
@ y
The Y key.
Definition console_key.hpp:136
@ x
The X key.
Definition console_key.hpp:134
Contains xtd::is method.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::string_comparison enum class.
Provides the base class for enumerations.
Definition enum_object.hpp:47