/// <summary> /// /// </summary> /// <param name="collection"></param> /// <returns></returns> public override bool AddAll(ICollection <E> collection) { if (0 == collection.Count || this == collection) { return(false); } if (collection is EnumSet <E> ) { EnumSet <E> set = (EnumSet <E>)collection; if (!IsValidType(set.elementClass)) { throw new Exception("ClassCastException"); } HugeEnumSet <E> hugeSet = (HugeEnumSet <E>)set; bool addSuccessful = false; for (int i = 0; i < bits.Length; i++) { oldBits = bits[i]; bits[i] |= hugeSet.bits[i]; if (oldBits != bits[i]) { addSuccessful = true; size = size - Int64Helper.BitCount(oldBits) + Int64Helper.BitCount(bits[i]); } } return(addSuccessful); } return(base.AddAll(collection)); }
public HugeEnumSetIterator(HugeEnumSet <E> outer) { this.outer = outer; unProcessedBits = new long[outer.bits.Length]; Array.Copy(outer.bits, 0, unProcessedBits, 0, outer.bits.Length); bitsPosition = unProcessedBits.Length; FindNextNoneZeroPosition(0); if (bitsPosition == unProcessedBits.Length) { canProcess = false; } }
/// <summary> /// /// </summary> /// <param name="collection"></param> /// <returns></returns> public override bool ContainsAll(ICollection <E> collection) { if (collection.Count == 0) { return(true); } if (collection is HugeEnumSet <E> ) { HugeEnumSet <E> set = (HugeEnumSet <E>)collection; if (IsValidType(set.elementClass)) { for (int i = 0; i < bits.Length; i++) { if ((bits[i] & set.bits[i]) != set.bits[i]) { return(false); } } return(true); } } return(!(collection is EnumSet <E>) && base.ContainsAll(collection)); }