Пример #1
0
        private static MutationResult SymmetricExcept(IEnumerable <T> other, MutationInput origin)
        {
            Requires.NotNull(other, "other");

            var otherAsSet = Empty.Union(other);

            int count  = 0;
            var result = SortedInt32KeyNode <HashBucket> .EmptyNode;

            foreach (T item in new NodeEnumerable(origin.Root))
            {
                if (!otherAsSet.Contains(item))
                {
                    var mutationResult = Add(item, new MutationInput(result, origin.EqualityComparer, count));
                    result = mutationResult.Root;
                    count += mutationResult.Count;
                }
            }

            foreach (T item in otherAsSet)
            {
                if (!Contains(item, origin))
                {
                    var mutationResult = Add(item, new MutationInput(result, origin.EqualityComparer, count));
                    result = mutationResult.Root;
                    count += mutationResult.Count;
                }
            }

            return(new MutationResult(result, count, CountType.FinalValue));
        }
Пример #2
0
        /// <summary>
        /// See the <see cref="IImmutableSet{T}"/> interface.
        /// </summary>
        public ImmutableHashSet <T> WithComparer(IEqualityComparer <T>?equalityComparer)
        {
            equalityComparer ??= EqualityComparer <T> .Default;

            if (equalityComparer == _equalityComparer)
            {
                return(this);
            }
            else
            {
                var result = new ImmutableHashSet <T>(equalityComparer);
                result = result.Union(this, avoidWithComparer: true);
                Debug.Assert(result != null);
                return(result);
            }
        }
Пример #3
0
        public ImmutableHashSet <T> WithComparer(IEqualityComparer <T> equalityComparer)
        {
            Contract.Ensures(Contract.Result <ImmutableHashSet <T> >() != null);
            if (equalityComparer == null)
            {
                equalityComparer = EqualityComparer <T> .Default;
            }

            if (equalityComparer == this.equalityComparer)
            {
                return(this);
            }
            else
            {
                var result = new ImmutableHashSet <T>(equalityComparer);
                result = result.Union(this, avoidWithComparer: true);
                return(result);
            }
        }
Пример #4
0
            /// <summary>
            /// Modifies the current set so that it contains all elements that are present in both the current set and in the specified collection.
            /// </summary>
            /// <param name="other">The collection to compare to the current set.</param>
            public void UnionWith(IEnumerable <T> other)
            {
                var result = ImmutableHashSet <T> .Union(other, this.Origin);

                this.Apply(result);
            }