/// <summary> /// Adds all the elements in the specified collection to the set if they are not already present. /// </summary> /// <param name="c">A collection of objects to add to the set.</param> /// <returns><c>true</c> is the set changed as a result of this operation, <c>false</c> if not.</returns> public sealed override bool AddAll(ICollection c) { Set temp; lock(c.SyncRoot) { temp = new HybridSet(c); } lock(_syncRoot) { return _basisSet.AddAll(temp); } }
/// <summary> /// Returns <c>true</c> if the set contains all the elements in the specified collection. /// </summary> /// <param name="c">A collection of objects.</param> /// <returns><c>true</c> if the set contains all the elements in the specified collection, <c>false</c> otherwise.</returns> public sealed override bool ContainsAll(ICollection c) { Set temp; lock (c.SyncRoot) { temp = new HybridSet(c); } lock (_syncRoot) { return(_basisSet.ContainsAll(temp)); } }
/// <summary> /// Retains only the elements in this set that are contained in the specified collection. /// </summary> /// <param name="c">Collection that defines the set of elements to be retained.</param> /// <returns><c>true</c> if this set changed as a result of this operation.</returns> public sealed override bool RetainAll(ICollection c) { //Put data from C into a set so we can use the Contains() method. Set cSet = new HybridSet(c); //We are going to build a set of elements to remove. Set removeSet = new HybridSet(); foreach (object o in this) { //If C does not contain O, then we need to remove O from our //set. We can't do this while iterating through our set, so //we put it into RemoveSet for later. if (!cSet.Contains(o)) { removeSet.Add(o); } } return(this.RemoveAll(removeSet)); }
/// <summary> /// Retains only the elements in this set that are contained in the specified collection. /// </summary> /// <param name="c">Collection that defines the set of elements to be retained.</param> /// <returns><c>true</c> if this set changed as a result of this operation.</returns> public sealed override bool RetainAll(ICollection c) { //Put data from C into a set so we can use the Contains() method. Set cSet = new HybridSet(c); //We are going to build a set of elements to remove. Set removeSet = new HybridSet(); foreach(object o in this) { //If C does not contain O, then we need to remove O from our //set. We can't do this while iterating through our set, so //we put it into RemoveSet for later. if(!cSet.Contains(o)) removeSet.Add(o); } return this.RemoveAll(removeSet); }