System.Collections.Immutable by Microsoft

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

.NET API 252,680 bytes

 Int32FrozenSet

using System.Buffers; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace System.Collections.Frozen { internal sealed class Int32FrozenSet : FrozenSetInternalBase<int, Int32FrozenSet.GSW> { internal struct GSW : IGenericSpecializedWrapper { private Int32FrozenSet _set; public int Count => _set.Count; [System.Runtime.CompilerServices.Nullable(1)] public IEqualityComparer<int> Comparer { [System.Runtime.CompilerServices.NullableContext(1)] get { return _set.Comparer; } } [System.Runtime.CompilerServices.NullableContext(1)] public void Store(FrozenSet<int> set) { _set = (Int32FrozenSet)set; } public int FindItemIndex(int item) { return _set.FindItemIndex(item); } public Enumerator GetEnumerator() { return _set.GetEnumerator(); } } private readonly FrozenHashTable _hashTable; [System.Runtime.CompilerServices.Nullable(1)] private protected override int[] ItemsCore { [System.Runtime.CompilerServices.NullableContext(1)] get { return _hashTable.HashCodes; } } private protected override int CountCore => _hashTable.Count; [System.Runtime.CompilerServices.NullableContext(1)] internal Int32FrozenSet(HashSet<int> source) : base((IEqualityComparer<int>)EqualityComparer<int>.Default) { int count = source.Count; int[] array = ArrayPool<int>.Shared.Rent(count); source.CopyTo(array); _hashTable = FrozenHashTable.Create(new Span<int>(array, 0, count), true); ArrayPool<int>.Shared.Return(array, false); } private protected override Enumerator GetEnumeratorCore() { return new Enumerator(_hashTable.HashCodes); } private protected override int FindItemIndex(int item) { _hashTable.FindMatchingEntries(item, out int i, out int endIndex); int[] hashCodes = _hashTable.HashCodes; for (; i <= endIndex; i++) { if (item == hashCodes[i]) return i; } return -1; } } }