8[DebuggerDisplay(
"Count = {Count}")]
10public sealed class ImmutableHashSet<T> :
IImmutableSet<T>,
IReadOnlyCollection<T>,
IEnumerable<T>,
IEnumerable,
IHashKeyCollection<T>,
ICollection<T>,
ISet<T>,
ICollection,
IStrongEnumerable<T, ImmutableHashSet<T>.Enumerator>,
IReadOnlySet<T>
58 [DebuggerDisplay(
"Count = {Count}")]
157 return result.Count != 0;
164 return result.Count != 0;
709 object ICollection.SyncRoot =>
this;
712 bool ICollection.IsSynchronized =>
true;
1034 int num2 = ((
item !=
null) ? origin.EqualityComparer.GetHashCode(
item) : 0);
1049 if (origin.
Root.IsEmpty)
1163 if (origin.
Root.IsEmpty)
1184 if (num == origin.Count && flag)
1195 if (origin.
Root.IsEmpty)
1208 return origin.Count > num;
1214 if (origin.
Root.IsEmpty)
1227 return num == origin.Count;
1270public static class ImmutableHashSet
1339 return source.ToImmutableHashSet(
null);
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void CopyTo(KeyValuePair< TKey, TValue >[] array, int index)
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
bool ICollection< KeyValuePair< TKey, TValue > >. IsReadOnly
Enumerator GetEnumerator()
void Add(TKey key, TValue value)
bool TryGetValue(T equalValue, out T actualValue)
SortedInt32KeyNode< HashBucket > _root
bool IsSupersetOf(IEnumerable< T > other)
Builder(ImmutableHashSet< T > set)
readonly IEqualityComparer< HashBucket > _hashBucketEqualityComparer
ImmutableHashSet< T > ToImmutable()
IEqualityComparer< T > KeyComparer
void UnionWith(IEnumerable< T > other)
void SymmetricExceptWith(IEnumerable< T > other)
bool SetEquals(IEnumerable< T > other)
void IntersectWith(IEnumerable< T > other)
void Apply(MutationResult result)
void ExceptWith(IEnumerable< T > other)
Enumerator GetEnumerator()
IEqualityComparer< T > _equalityComparer
SortedInt32KeyNode< HashBucket > Root
bool Overlaps(IEnumerable< T > other)
bool IsProperSupersetOf(IEnumerable< T > other)
bool IsProperSubsetOf(IEnumerable< T > other)
bool IsSubsetOf(IEnumerable< T > other)
ImmutableHashSet< T > _immutable
static IEqualityComparer< HashBucket > DefaultInstance
HashBucketByRefEqualityComparer()
int GetHashCode(HashBucket obj)
static readonly IEqualityComparer< HashBucket > s_defaultInstance
bool Equals(HashBucket x, HashBucket y)
readonly IEqualityComparer< T > _valueComparer
static IEqualityComparer< HashBucket > DefaultInstance
bool Equals(HashBucket x, HashBucket y)
static readonly IEqualityComparer< HashBucket > s_defaultInstance
int GetHashCode(HashBucket obj)
HashBucketByValueEqualityComparer(IEqualityComparer< T > valueComparer)
static ImmutableHashSet< T > Wrap(SortedInt32KeyNode< HashBucket > root, IEqualityComparer< T > equalityComparer, int count)
static readonly Action< KeyValuePair< int, HashBucket > > s_FreezeBucketAction
static ImmutableHashSet< T > Create< T >()
readonly IEqualityComparer< HashBucket > _hashBucketEqualityComparer
static bool Overlaps(IEnumerable< T > other, MutationInput origin)
static MutationResult Except(IEnumerable< T > other, IEqualityComparer< T > equalityComparer, IEqualityComparer< HashBucket > hashBucketEqualityComparer, SortedInt32KeyNode< HashBucket > root)
ImmutableHashSet< T > Add(T item)
static IEqualityComparer< HashBucket > GetHashBucketEqualityComparer(IEqualityComparer< T > valueComparer)
bool IsProperSubsetOf(IEnumerable< T > other)
static bool IsSubsetOf(IEnumerable< T > other, MutationInput origin)
bool TryGetValue(T equalValue, out T actualValue)
bool IsProperSupersetOf(IEnumerable< T > other)
ImmutableHashSet< T > Union(IEnumerable< T > other)
ImmutableHashSet< T > Intersect(IEnumerable< T > other)
ImmutableHashSet< T > Wrap(SortedInt32KeyNode< HashBucket > root, int adjustedCountIfDifferentRoot)
static ImmutableHashSet< T > CreateRange< T >(IEnumerable< T > items)
static MutationResult Union(IEnumerable< T > other, MutationInput origin)
static MutationResult Add(T item, MutationInput origin)
ImmutableHashSet< T > Remove(T item)
ImmutableHashSet< T > Union(IEnumerable< T > items, bool avoidWithComparer)
static ImmutableHashSet< T >.Builder CreateBuilder< T >()
static bool IsSupersetOf(IEnumerable< T > other, MutationInput origin)
ImmutableHashSet(SortedInt32KeyNode< HashBucket > root, IEqualityComparer< T > equalityComparer, int count)
static bool Contains(T item, MutationInput origin)
ImmutableHashSet< T > SymmetricExcept(IEnumerable< T > other)
ImmutableHashSet< T > Except(IEnumerable< T > other)
static bool SetEquals(IEnumerable< T > other, MutationInput origin)
static MutationResult Remove(T item, MutationInput origin)
ImmutableHashSet< T > WithComparer(IEqualityComparer< T >? equalityComparer)
static bool IsProperSupersetOf(IEnumerable< T > other, MutationInput origin)
ImmutableHashSet(IEqualityComparer< T > equalityComparer)
ImmutableHashSet< T > Clear()
static SortedInt32KeyNode< HashBucket > UpdateRoot(SortedInt32KeyNode< HashBucket > root, int hashCode, IEqualityComparer< HashBucket > hashBucketEqualityComparer, HashBucket newBucket)
readonly SortedInt32KeyNode< HashBucket > _root
static ImmutableHashSet< TSource > ToImmutableHashSet< TSource >(this IEnumerable< TSource > source, IEqualityComparer< TSource >? equalityComparer)
bool Overlaps(IEnumerable< T > other)
bool IsSubsetOf(IEnumerable< T > other)
Enumerator GetEnumerator()
static bool IsProperSubsetOf(IEnumerable< T > other, MutationInput origin)
bool SetEquals(IEnumerable< T > other)
static MutationResult Intersect(IEnumerable< T > other, MutationInput origin)
static MutationResult SymmetricExcept(IEnumerable< T > other, MutationInput origin)
IEqualityComparer< T > KeyComparer
bool IsSupersetOf(IEnumerable< T > other)
readonly IEqualityComparer< T > _equalityComparer
static void Range(bool condition, string? parameterName, string? message=null)
static string CollectionModifiedDuringEnumeration
int GetHashCode([DisallowNull] T obj)
void CopyTo(Array array, int index)
IEnumerator GetEnumerator()
object? IEnumerator. Current
readonly Builder _builder
SortedInt32KeyNode< HashBucket >.Enumerator _mapEnumerator
Enumerator(SortedInt32KeyNode< HashBucket > root, Builder? builder=null)
int _enumeratingBuilderVersion
HashBucket.Enumerator _bucketEnumerator
Position _currentPosition
Enumerator(HashBucket bucket)
object? IEnumerator. Current
readonly HashBucket _bucket
ImmutableList< T >.Enumerator _additionalEnumerator
bool TryExchange(T value, IEqualityComparer< T > valueComparer, out T existingValue)
Enumerator GetEnumerator()
HashBucket(T firstElement, ImmutableList< T >.Node additionalElements=null)
bool EqualsByRef(HashBucket other)
bool Contains(T value, IEqualityComparer< T > valueComparer)
bool EqualsByValue(HashBucket other, IEqualityComparer< T > valueComparer)
override bool Equals(object? obj)
HashBucket Add(T value, IEqualityComparer< T > valueComparer, out OperationResult result)
HashBucket Remove(T value, IEqualityComparer< T > equalityComparer, out OperationResult result)
override int GetHashCode()
readonly ImmutableList< T >.Node _additionalElements
MutationResult(SortedInt32KeyNode< HashBucket > root, int count, CountType countType=CountType.Adjustment)
SortedInt32KeyNode< HashBucket > Root
readonly SortedInt32KeyNode< HashBucket > _root
ImmutableHashSet< T > Finalize(ImmutableHashSet< T > priorSet)
readonly CountType _countType
NodeEnumerable(SortedInt32KeyNode< HashBucket > root)
Enumerator GetEnumerator()
readonly SortedInt32KeyNode< HashBucket > _root