using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Lua.Internal; public sealed class Utf16StringMemoryComparer : IEqualityComparer> { public static readonly Utf16StringMemoryComparer Default = new(); public bool Equals(ReadOnlyMemory x, ReadOnlyMemory y) { return x.Span.SequenceEqual(y.Span); } public int GetHashCode(ReadOnlyMemory obj) { var span = MemoryMarshal.CreateReadOnlySpan(ref Unsafe.As(ref MemoryMarshal.GetReference(obj.Span)), obj.Length * 2); return (int)unchecked(FarmHash.Hash64(span)); } }