2#ifndef _iequality_comparer_h_
3#define _iequality_comparer_h_
5#include "system/object.h"
6#include <system/details/equality_helper.h>
8namespace System {
namespace Collections {
namespace Generic {
26 virtual bool Equals(T x, T y)
const = 0;
45 : m_comparator(comparator)
52 m_comparator = comparator;
62 return m_comparator->Equals(x, y);
64 return System::Details::AreEqual(x, y);
75template <
typename T,
class Enable =
void>
85struct ASPOSECPP_SHARED_CLASS
DictionaryHashSelector<T, typename std::enable_if<System::detail::has_method_gethashcode<T>::value>::type>
91 using argument_type =
const T&;
93 using result_type = std::size_t;
97 std::size_t operator ()(argument_type obj)
const
99 return static_cast<std::size_t
>(obj.GetHashCode());
107struct 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>
113 using argument_type =
const T&;
115 using result_type = std::size_t;
135struct ASPOSECPP_SHARED_CLASS DictionaryHashSelector<
T, typename std::enable_if<std::is_enum<T>::value>::type>
141 using argument_type =
const T&;
143 using result_type = std::size_t;
147 std::size_t operator ()(argument_type enum_)
const
149 return static_cast<std::size_t
>(enum_);
166 : m_comparator(comparator)
172 m_comparator = comparator;
177 std::size_t operator ()(
const T &x)
const
180 return static_cast<std::size_t
>(m_comparator->GetHashCode(x));
184 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:17
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:195
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:62
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
Definition: db_command.h:9
Hash function selector for Dictionary class. This implementation uses STL hashing given no alternativ...
Definition: iequality_comparer.h:77
std::hash< T > type
Hasher type to use.
Definition: iequality_comparer.h:79
Adapter making it possible using IEqualityComparer with STL-styled collections and algorithms....
Definition: iequality_comparer.h:38
EqualityComparerAdapter()
Creates adapter not using any comparator.
Definition: iequality_comparer.h:40
bool operator()(const T &x, const T &y) const
Compares two objects.
Definition: iequality_comparer.h:59
void set_EqualityComparator(const SharedPtr< IEqualityComparer< T > > &comparator)
Sets comparator.
Definition: iequality_comparer.h:50
EqualityComparerAdapter(const SharedPtr< IEqualityComparer< T > > &comparator)
Creates adapter with given comparator.
Definition: iequality_comparer.h:44
Adapter to use IEqualityComparer for hashing. Uses comparator object, if set; otherwise,...
Definition: iequality_comparer.h:159
EqualityComparerHashAdapter()
Creates adapter with no comparator to use.
Definition: iequality_comparer.h:161
EqualityComparerHashAdapter(const SharedPtr< IEqualityComparer< T > > &comparator)
Creates adapter with given comparator to use.
Definition: iequality_comparer.h:165
void set_EqualityComparator(const SharedPtr< IEqualityComparer< T > > &comparator)
Sets comparator to use.
Definition: iequality_comparer.h:170