public int Compare(ProblemString x, ProblemString y) { var xStringPart = x.RawString.AsSpan(x.PointIndex + 1); var yStringPart = y.RawString.AsSpan(y.PointIndex + 1); var stringPartCompareResult = MemoryExtensions.CompareTo(xStringPart, yStringPart, StringComparison.Ordinal); return(stringPartCompareResult == 0 ? x.Number - y.Number : stringPartCompareResult); }
bool IEqualityComparer.Equals(object?x, object?y) { ReadOnlySpan <char> left = x switch { string str => str, char[] chars => chars, _ => x?.ToString() }; ReadOnlySpan <char> right = y switch { string str => str, char[] chars => chars, _ => x?.ToString() }; return(MemoryExtensions.Equals(left, right, _comparison)); } int IEqualityComparer.GetHashCode(object obj) { ReadOnlySpan <char> span = obj switch { string str => str, char[] chars => chars, _ => obj?.ToString() }; return(string.GetHashCode(span, _comparison)); } int IComparer.Compare(object?x, object?y) { ReadOnlySpan <char> left = x switch { string str => str, char[] chars => chars, _ => x?.ToString() }; ReadOnlySpan <char> right = y switch { string str => str, char[] chars => chars, _ => x?.ToString() }; return(MemoryExtensions.CompareTo(left, right, _comparison)); } } }
public int Compare(char[]?x, char[]?y) { return(MemoryExtensions.CompareTo(x, y, _comparison)); }
public int Compare(string?x, string?y) { return(MemoryExtensions.CompareTo(x, y, _comparison)); }
public int Compare(ReadOnlySpan <char> x, ReadOnlySpan <char> y) { return(MemoryExtensions.CompareTo(x, y, _comparison)); }