// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; namespace EpicGames.Core { /// /// Comparer for String objects. However, it implements UE style ignore case compare /// public class StringComparerUE : IComparer, IEqualityComparer { /// /// Static instance of an ordinal String comparer /// public static StringComparerUE Ordinal { get; } = new StringComparerUE(StringComparison.Ordinal); /// /// Static instance of an ordinal String comparer which ignores case /// public static StringComparerUE OrdinalIgnoreCase { get; } = new StringComparerUE(StringComparison.OrdinalIgnoreCase); /// /// The comparison type /// public StringComparison ComparisonType { get; } /// /// Constructor /// /// Type of comparison to perform public StringComparerUE(StringComparison comparisonType) { ComparisonType = comparisonType; } /// public bool Equals(string? x, string? y) { return String.Equals(x, y, ComparisonType); } /// public int GetHashCode(string obj) { return String.GetHashCode(obj, ComparisonType); } /// public int Compare(string? x, string? y) { if (ComparisonType == StringComparison.OrdinalIgnoreCase) { if (x == null) { return y == null ? 0 : -1; } else if (y == null) { return 1; } return StringUtils.CompareIgnoreCaseUe(x.AsSpan(), y.AsSpan()); } else { return String.Compare(x, y, ComparisonType); } } } }