2#ifndef _iequality_comparer_h_
3#define _iequality_comparer_h_
5#include "system/object.h"
6#include <system/details/equality_helper.h>
7#include <system/string.h>
9namespace System {
namespace Collections {
namespace Generic {
27 virtual bool Equals(T x, T y)
const = 0;
46 : m_comparator(comparator)
53 m_comparator = comparator;
63 return m_comparator->Equals(x, y);
65 return System::Details::AreEqual(x, y);
76template <
typename T,
class Enable =
void>
99 return static_cast<std::size_t
>(obj ==
nullptr ? 0 : obj.
GetHashCode());
107struct ASPOSECPP_SHARED_CLASS DictionaryHashSelector<T, typename std::enable_if<System::detail::has_method_gethashcode<T>::value>::type>
113 using argument_type =
const T&;
115 using result_type = std::size_t;
119 std::size_t operator ()(argument_type obj)
const
121 return static_cast<std::size_t
>(obj.GetHashCode());
129struct ASPOSECPP_SHARED_CLASS DictionaryHashSelector<
T, typename std::enable_if<System::detail::has_ref_method_gethashcode<T>::value && !System::detail::has_method_gethashcode<T>::value>::type>
135 using argument_type =
const T&;
137 using result_type = std::size_t;
157struct ASPOSECPP_SHARED_CLASS DictionaryHashSelector<
T, typename std::enable_if<std::is_enum<T>::value>::type>
163 using argument_type =
const T&;
165 using result_type = std::size_t;
169 std::size_t operator ()(argument_type enum_)
const
171 return static_cast<std::size_t
>(enum_);
188 : m_comparator(comparator)
194 m_comparator = comparator;
199 std::size_t operator ()(
const T &x)
const
202 return static_cast<std::size_t
>(m_comparator->GetHashCode(x));
206 return hash_selector(x);
Interface providing means to compare two objects for equality. Objects of this class should only be a...
Definition: iequality_comparer.h:18
virtual int GetHashCode(T obj) const =0
Gets hash code for some object.
RTTI_INFO_TEMPLATE_CLASS(System::Collections::Generic::IEqualityComparer< T >, System::BaseTypesInfo< System::Object >)
RTTI information.
virtual bool Equals(T x, T y) const =0
Checks if two objects are equal.
Definition: iequality_comparer.h:217
virtual bool Equals(const SharedPtr< Object > &x, const SharedPtr< Object > &y) const =0
Checks if two objects are equal.
RTTI_INFO_TEMPLATE_CLASS(System::Collections::IEqualityComparer, System::BaseTypesInfo< System::Object >)
RTTI information.
virtual int GetHashCode(const SharedPtr< Object > &obj) const =0
Gets hash code for some object.
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:51
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
int GetHashCode() const
Calls GetHashCode() on pointed object.
Definition: smart_ptr.h:877
String class used across the library. Is a substitute for C# System.String when translating code....
Definition: string.h:125
int GetHashCode() const
Hashes contained string. Implemented in ICU, doesn't match hashes in C#.
Definition: db_command.h:9
std::size_t result_type
Result type.
Definition: iequality_comparer.h:93
Hash function selector for Dictionary class. This implementation uses STL hashing given no alternativ...
Definition: iequality_comparer.h:78
std::hash< T > type
Hasher type to use.
Definition: iequality_comparer.h:80
Adapter making it possible using IEqualityComparer with STL-styled collections and algorithms....
Definition: iequality_comparer.h:39
EqualityComparerAdapter()
Creates adapter not using any comparator.
Definition: iequality_comparer.h:41
bool operator()(const T &x, const T &y) const
Compares two objects.
Definition: iequality_comparer.h:60
void set_EqualityComparator(const SharedPtr< IEqualityComparer< T > > &comparator)
Sets comparator.
Definition: iequality_comparer.h:51
EqualityComparerAdapter(const SharedPtr< IEqualityComparer< T > > &comparator)
Creates adapter with given comparator.
Definition: iequality_comparer.h:45
Adapter to use IEqualityComparer for hashing. Uses comparator object, if set; otherwise,...
Definition: iequality_comparer.h:181
EqualityComparerHashAdapter()
Creates adapter with no comparator to use.
Definition: iequality_comparer.h:183
EqualityComparerHashAdapter(const SharedPtr< IEqualityComparer< T > > &comparator)
Creates adapter with given comparator to use.
Definition: iequality_comparer.h:187
void set_EqualityComparator(const SharedPtr< IEqualityComparer< T > > &comparator)
Sets comparator to use.
Definition: iequality_comparer.h:192