ItemsFrozenSet<T, TThisWrapper>
abstract class ItemsFrozenSet<T, TThisWrapper> : FrozenSetInternalBase<T, TThisWrapper> where TThisWrapper : struct, IGenericSpecializedWrapper<T, TThisWrapper>
Provides a base class for frozen sets that store their values in a dedicated array.
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
})]
internal abstract class ItemsFrozenSet<[System.Runtime.CompilerServices.Nullable(2)] T, [System.Runtime.CompilerServices.Nullable(0)] TThisWrapper> : FrozenSetInternalBase<T, TThisWrapper> where TThisWrapper : struct, FrozenSetInternalBase<T, TThisWrapper>.IGenericSpecializedWrapper
{
private protected readonly FrozenHashTable _hashTable;
private protected readonly T[] _items;
private protected sealed override T[] ItemsCore => _items;
private protected sealed override int CountCore => _hashTable.Count;
protected ItemsFrozenSet(HashSet<T> source, bool optimizeForReading = true)
: base(source.Comparer)
{
T[] entries = new T[source.Count];
source.CopyTo(entries);
_items = new T[entries.Length];
_hashTable = FrozenHashTable.Create(entries.Length, delegate(int index) {
T val = entries[index];
if (val == null)
return 0;
return base.Comparer.GetHashCode(val);
}, delegate(int destIndex, int srcIndex) {
_items[destIndex] = entries[srcIndex];
}, optimizeForReading);
}
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})]
private protected sealed override Enumerator GetEnumeratorCore()
{
return new Enumerator(_items);
}
}
}