using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace KamiToolKit.Classes; internal static class GenericUtil { public static bool AreEqual(T? left, T? right) { if (default(T) == null) return ReferenceEquals(left, right); if (left == null || right == null) return left == null && right == null; var leftSpan = MemoryMarshal.CreateReadOnlySpan(ref Unsafe.As(ref left), Unsafe.SizeOf()); var rightSpan = MemoryMarshal.CreateReadOnlySpan(ref Unsafe.As(ref right), Unsafe.SizeOf()); return leftSpan.SequenceEqual(rightSpan); } }