Utf16StringMemoryComparer.cs 651 B

1234567891011121314151617181920
  1. using System.Runtime.CompilerServices;
  2. using System.Runtime.InteropServices;
  3. namespace Lua.Internal;
  4. public sealed class Utf16StringMemoryComparer : IEqualityComparer<ReadOnlyMemory<char>>
  5. {
  6. public static readonly Utf16StringMemoryComparer Default = new();
  7. public bool Equals(ReadOnlyMemory<char> x, ReadOnlyMemory<char> y)
  8. {
  9. return x.Span.SequenceEqual(y.Span);
  10. }
  11. public int GetHashCode(ReadOnlyMemory<char> obj)
  12. {
  13. var span = MemoryMarshal.CreateReadOnlySpan(ref Unsafe.As<char, byte>(ref MemoryMarshal.GetReference(obj.Span)), obj.Length * 2);
  14. return (int)unchecked(FarmHash.Hash64(span));
  15. }
  16. }