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)); }
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)); }
public void symmetric_difference_update(object?set) { if (ReferenceEquals(set, this)) { _items.Clear(); return; } SetStorage items = SetStorage.GetItems(set); lock (_items) { _items.SymmetricDifferenceUpdate(items); } }
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)); }
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)); } } }
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)); } } }
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)); } } }
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)); }
public SetCollection difference(object set) { return(Make( SetStorage.Difference(_items, SetStorage.GetItems(set)) )); }
public bool issuperset(object set) { return(SetStorage.GetItems(set).IsSubset(_items)); }
public bool issubset(object set) { return(_items.IsSubset(SetStorage.GetItems(set))); }
public bool isdisjoint(object set) { return(_items.IsDisjoint(SetStorage.GetItems(set))); }