Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/System.Private.CoreLib/shared/System/Collections/CompatibleComparer.cs')
-rw-r--r--src/System.Private.CoreLib/shared/System/Collections/CompatibleComparer.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/System.Private.CoreLib/shared/System/Collections/CompatibleComparer.cs b/src/System.Private.CoreLib/shared/System/Collections/CompatibleComparer.cs
new file mode 100644
index 000000000..587fd6839
--- /dev/null
+++ b/src/System.Private.CoreLib/shared/System/Collections/CompatibleComparer.cs
@@ -0,0 +1,61 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#pragma warning disable 618 // obsolete types
+
+namespace System.Collections
+{
+ internal sealed class CompatibleComparer : IEqualityComparer
+ {
+ private readonly IHashCodeProvider _hcp;
+ private readonly IComparer _comparer;
+
+ internal CompatibleComparer(IHashCodeProvider hashCodeProvider, IComparer comparer)
+ {
+ _hcp = hashCodeProvider;
+ _comparer = comparer;
+ }
+
+ internal IHashCodeProvider HashCodeProvider => _hcp;
+
+ internal IComparer Comparer => _comparer;
+
+ public new bool Equals(object a, object b) => Compare(a, b) == 0;
+
+ public int Compare(object a, object b)
+ {
+ if (a == b)
+ return 0;
+ if (a == null)
+ return -1;
+ if (b == null)
+ return 1;
+
+ if (_comparer != null)
+ {
+ return _comparer.Compare(a, b);
+ }
+
+ IComparable ia = a as IComparable;
+ if (ia != null)
+ {
+ return ia.CompareTo(b);
+ }
+
+ throw new ArgumentException(SR.Argument_ImplementIComparable);
+ }
+
+ public int GetHashCode(object obj)
+ {
+ if (obj == null)
+ {
+ throw new ArgumentNullException(nameof(obj));
+ }
+
+ return _hcp != null ?
+ _hcp.GetHashCode(obj) :
+ obj.GetHashCode();
+ }
+ }
+}