DefaultFrozenSet<T>
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,
0,
1
})]
internal sealed class DefaultFrozenSet<[System.Runtime.CompilerServices.Nullable(2)] T> : ItemsFrozenSet<T, DefaultFrozenSet<T>.GSW>
{
[System.Runtime.CompilerServices.Nullable(0)]
internal struct GSW : IGenericSpecializedWrapper
{
private DefaultFrozenSet<T> _set;
public int Count => _set.Count;
public IEqualityComparer<T> Comparer => _set.Comparer;
public void Store(FrozenSet<T> set)
{
_set = (DefaultFrozenSet<T>)set;
}
public int FindItemIndex(T item)
{
return _set.FindItemIndex(item);
}
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})]
public Enumerator GetEnumerator()
{
return _set.GetEnumerator();
}
}
internal DefaultFrozenSet(HashSet<T> source)
: base(source, false)
{
}
private protected override int FindItemIndex(T item)
{
IEqualityComparer<T> comparer = base.Comparer;
int num = (item != null) ? comparer.GetHashCode(item) : 0;
_hashTable.FindMatchingEntries(num, out int i, out int endIndex);
for (; i <= endIndex; i++) {
if (num == _hashTable.HashCodes[i] && comparer.Equals(item, _items[i]))
return i;
}
return -1;
}
}
}