Beispiel #1
0
        public SetCollection symmetric_difference(object?set)
        {
            SetStorage items;

            if (SetStorage.GetItems(set, out items))
            {
                items = SetStorage.SymmetricDifference(_items, items);
            }
            else
            {
                items.SymmetricDifferenceUpdate(_items);
            }
            return(Make(items));
        }
Beispiel #2
0
        public SetCollection intersection(object?set)
        {
            SetStorage items;

            if (SetStorage.GetItems(set, out items))
            {
                items = SetStorage.Intersection(_items, items);
            }
            else
            {
                items.IntersectionUpdate(_items);
            }
            return(Make(items));
        }
Beispiel #3
0
        public void symmetric_difference_update(object?set)
        {
            if (ReferenceEquals(set, this))
            {
                _items.Clear();
                return;
            }

            SetStorage items = SetStorage.GetItems(set);

            lock (_items) {
                _items.SymmetricDifferenceUpdate(items);
            }
        }
Beispiel #4
0
        public FrozenSetCollection union(object?set)
        {
            SetStorage items;

            if (SetStorage.GetItems(set, out items))
            {
                items = SetStorage.Union(_items, items);
            }
            else
            {
                items.UnionUpdate(_items);
            }
            return(Make(items));
        }
Beispiel #5
0
        public void intersection_update([NotNull] params object[] /*!*/ sets)
        {
            if (sets.Length == 0)
            {
                return;
            }

            lock (_items) {
                foreach (object set in sets)
                {
                    if (object.ReferenceEquals(set, this))
                    {
                        continue;
                    }

                    _items.IntersectionUpdate(SetStorage.GetItems(set));
                }
            }
        }
Beispiel #6
0
        public void update([NotNull] params object[] /*!*/ sets)
        {
            Debug.Assert(sets != null);
            if (sets.Length == 0)
            {
                return;
            }

            lock (_items) {
                foreach (object set in sets)
                {
                    if (object.ReferenceEquals(set, this))
                    {
                        continue;
                    }

                    _items.UnionUpdate(SetStorage.GetItems(set));
                }
            }
        }
Beispiel #7
0
        public void difference_update([NotNull] params object[] /*!*/ sets)
        {
            if (sets.Length == 0)
            {
                return;
            }

            lock (_items) {
                foreach (object set in sets)
                {
                    if (object.ReferenceEquals(set, this))
                    {
                        _items.ClearNoLock();
                        return;
                    }

                    _items.DifferenceUpdate(SetStorage.GetItems(set));
                }
            }
        }
Beispiel #8
0
        public SetCollection intersection([NotNull] params object[] /*!*/ sets)
        {
            Debug.Assert(sets != null);

            if (sets.Length == 0)
            {
                return(copy());
            }

            SetStorage res = _items;

            foreach (object set in sets)
            {
                SetStorage items, x = res, y;
                if (SetStorage.GetItems(set, out items))
                {
                    y = items;
                    SetStorage.SortBySize(ref x, ref y);

                    if (object.ReferenceEquals(x, items) || object.ReferenceEquals(x, _items))
                    {
                        x = x.Clone();
                    }
                }
                else
                {
                    y = items;
                    SetStorage.SortBySize(ref x, ref y);

                    if (object.ReferenceEquals(x, _items))
                    {
                        x = x.Clone();
                    }
                }
                x.IntersectionUpdate(y);
                res = x;
            }

            Debug.Assert(!object.ReferenceEquals(res, _items));
            return(Make(res));
        }
Beispiel #9
0
 public SetCollection difference(object set)
 {
     return(Make(
                SetStorage.Difference(_items, SetStorage.GetItems(set))
                ));
 }
Beispiel #10
0
 public bool issuperset(object set)
 {
     return(SetStorage.GetItems(set).IsSubset(_items));
 }
Beispiel #11
0
 public bool issubset(object set)
 {
     return(_items.IsSubset(SetStorage.GetItems(set)));
 }
Beispiel #12
0
 public bool isdisjoint(object set)
 {
     return(_items.IsDisjoint(SetStorage.GetItems(set)));
 }