System.Collections.Immutable by Microsoft

<PackageReference Include="System.Collections.Immutable" Version="9.0.9" />

.NET API 259,368 bytes

 LengthBucketsFrozenSet

using System.Collections.Generic; using System.Runtime.CompilerServices; namespace System.Collections.Frozen { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] internal sealed class LengthBucketsFrozenSet : FrozenSetInternalBase<string, LengthBucketsFrozenSet.GSW> { [System.Runtime.CompilerServices.Nullable(0)] internal struct GSW : IGenericSpecializedWrapper { private LengthBucketsFrozenSet _set; public int Count => _set.Count; public IEqualityComparer<string> Comparer => _set.Comparer; public void Store(FrozenSet<string> set) { _set = (LengthBucketsFrozenSet)set; } public int FindItemIndex(string item) { return _set.FindItemIndex(item); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] public Enumerator GetEnumerator() { return _set.GetEnumerator(); } } private readonly int[] _lengthBuckets; private readonly int _minLength; private readonly string[] _items; private readonly bool _ignoreCase; private protected override string[] ItemsCore => _items; private protected override int CountCore => _items.Length; private LengthBucketsFrozenSet(string[] items, int[] lengthBuckets, int minLength, IEqualityComparer<string> comparer) : base(comparer) { _items = items; _lengthBuckets = lengthBuckets; _minLength = minLength; _ignoreCase = (comparer == StringComparer.OrdinalIgnoreCase); } [return: System.Runtime.CompilerServices.Nullable(2)] internal static LengthBucketsFrozenSet CreateLengthBucketsFrozenSetIfAppropriate(string[] items, IEqualityComparer<string> comparer, int minLength, int maxLength) { int[] array = LengthBuckets.CreateLengthBucketsArrayIfAppropriate(items, comparer, minLength, maxLength); if (array == null) return null; return new LengthBucketsFrozenSet(items, array, minLength, comparer); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] private protected override Enumerator GetEnumeratorCore() { return new Enumerator(_items); } [System.Runtime.CompilerServices.NullableContext(2)] private protected override int FindItemIndex(string item) { if (item != null) { int i = (item.Length - _minLength) * 5; int num = i + 5; int[] lengthBuckets = _lengthBuckets; if (i >= 0 && num <= lengthBuckets.Length) { string[] items = _items; if (_ignoreCase) { for (; i < num; i++) { int num2 = lengthBuckets[i]; if ((uint)num2 >= (uint)items.Length) break; if (StringComparer.OrdinalIgnoreCase.Equals(item, items[num2])) return num2; } } else { for (; i < num; i++) { int num3 = lengthBuckets[i]; if ((uint)num3 >= (uint)items.Length) break; if (item == items[num3]) return num3; } } } } return -1; } } }