// Animancer // Copyright 2020 Kybernetik // using System.Collections.Generic; namespace Animancer { /// <summary> /// An <see cref="IEqualityComparer{T}"/> which ignores overloaded equality operators so it is faster than /// <see cref="EqualityComparer{T}.Default"/> for types derived from <see cref="UnityEngine.Object"/>. /// </summary> public sealed class FastComparer : IEqualityComparer<object> { /************************************************************************************************************************/ /// <summary>Singleton instance.</summary> public static readonly FastComparer Instance = new FastComparer(); /// <summary>Calls <see cref="object.Equals(object, object)"/>.</summary> /// <remarks> /// We could use <see cref="object.ReferenceEquals"/> for slightly better performance, but that would not work /// for boxed value types (enums in particular). /// </remarks> bool IEqualityComparer<object>.Equals(object x, object y) { return Equals(x, y); } /// <summary>Calls <see cref="object.GetHashCode"/>.</summary> int IEqualityComparer<object>.GetHashCode(object obj) { return obj.GetHashCode(); } /************************************************************************************************************************/ } }