// /* Copyright (c) 2022 bradson // * This Source Code Form is subject to the terms of the Mozilla Public // * License, v. 2.0. If a copy of the MPL was not distributed with this // * file, You can obtain one at https://mozilla.org/MPL/2.0/. // */ using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; namespace FisheryLib; public static class Equality { /// /// Generic overload of Equals to avoid boxing. Makes use of function pointers for best performance and does not throw on null for reference types. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static unsafe bool Equals([AllowNull] this T @this, [AllowNull] T other) => FunctionPointers.Equals.Default(@this!, other!); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static unsafe bool Equals([AllowNull] this ref T @this, [AllowNull] ref T other) where T : struct // required by the compiler for 'this ref' => FunctionPointers.EqualsByRef.Default(ref @this!, ref other!); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static unsafe bool EqualsByRef([AllowNull] ref T @this, [AllowNull] ref T other) => FunctionPointers.EqualsByRef.Default(ref @this!, ref other!); }