diff Implab/CustomEqualityComparer.cs @ 55:c0bf853aa04f

Added initial JSON support +JSONParser +JSONWriter
author cin
date Sun, 15 Jun 2014 19:39:11 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/CustomEqualityComparer.cs	Sun Jun 15 19:39:11 2014 +0400
@@ -0,0 +1,49 @@
+using Implab;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Implab {
+    /// <summary>
+    /// Обертка для создания <c>IEqualityComparer</c> с использованием делегатов или лямда-выражений.
+    /// </summary>
+    /// <typeparam name="T">Тип сравниваемых значений</typeparam>
+    public class CustomEqualityComparer<T> : IEqualityComparer<T> {
+        Func<T, T, bool> m_equals;
+        Func<T, int> m_hash;
+
+        /// <summary>
+        /// Создает новый объект с указанными функциями сравнения на раветво и получения хеш-кода.
+        /// </summary>
+        /// <param name="equality">Функция проверки на равенство</param>
+        /// <param name="hash">Функция получения хешкода</param>
+        public CustomEqualityComparer(Func<T, T, bool> equality, Func<T, int> hash) {
+            Safe.ArgumentNotNull(equality, "equality");
+            Safe.ArgumentNotNull(hash, "hash");
+            m_hash = hash;
+            m_equals = equality;
+        }
+
+        /// <summary>
+        /// Сравнивает два знаечния на ревенство.
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <returns>Результат сравнения на равенство</returns>
+        public bool Equals(T x, T y) {
+            return m_equals(x,y);
+        }
+
+        /// <summary>
+        /// Получает хеш-код для указанного значения.
+        /// </summary>
+        /// <param name="obj"></param>
+        /// <remarks>Равные знаечния *должны* иметь одинаковый хеш-код.</remarks>
+        /// <returns>Хеш-код</returns>
+        public int GetHashCode(T obj) {
+            return m_hash(obj);
+        }
+    }
+}