@Override @SuppressWarnings("unchecked") public BitSet<T> addAll(Iterable<? extends T> elements) { final Stream<Integer> source = Stream.ofAll(elements).map(toInt); if (source.isEmpty()) { return this; } else { final long[] copy = copyExpand(1 + (source.max().getOrElse(0) >> ADDRESS_BITS_PER_WORD)); source.forEach(element -> { if (element < 0) { throw new IllegalArgumentException("bitset element must be >= 0"); } setElement(copy, element); }); final BitSet<T> bitSet = fromBitMaskNoCopy(copy); return (bitSet.length() == length()) ? this : bitSet; } }
@Override @SuppressWarnings("unchecked") public BitSet<T> addAll(Iterable<? extends T> elements) { final Stream<Integer> source = Stream.ofAll(elements).map(toInt); if (source.isEmpty()) { return this; } else { final long[] copy = copyExpand(1 + (source.max().getOrElse(0) >> ADDRESS_BITS_PER_WORD)); source.forEach(element -> { if (element < 0) { throw new IllegalArgumentException("bitset element must be >= 0"); } setElement(copy, element); }); final BitSet<T> bitSet = fromBitMaskNoCopy(copy); return (bitSet.length() == length()) ? this : bitSet; } }
@Override public BitSet<T> removeAll(Iterable<? extends T> elements) { if (isEmpty()) { return this; } else { final Stream<Integer> source = Stream.ofAll(elements).map(toInt); if (source.isEmpty()) { return this; } else { final long[] copy = copyExpand(getWordsNum()); source.forEach(element -> unsetElement(copy, element)); return fromBitMaskNoCopy(shrink(copy)); } } }
BitSet<T> addElement(int element) { final long[] copy = copyExpand(1 + (element >> ADDRESS_BITS_PER_WORD)); setElement(copy, element); return fromBitMaskNoCopy(copy); }
@Override public BitSet<T> remove(T t) { if (contains(t)) { final int element = toInt.apply(t); final long[] copy = copyExpand(getWordsNum()); unsetElement(copy, element); return fromBitMaskNoCopy(shrink(copy)); } else { return this; } }
@Override public BitSet<T> removeAll(Iterable<? extends T> elements) { if (isEmpty()) { return this; } else { final Stream<Integer> source = Stream.ofAll(elements).map(toInt); if (source.isEmpty()) { return this; } else { final long[] copy = copyExpand(getWordsNum()); source.forEach(element -> unsetElement(copy, element)); return fromBitMaskNoCopy(shrink(copy)); } } }
@Override public BitSet<T> remove(T t) { if (contains(t)) { final int element = toInt.apply(t); final long[] copy = copyExpand(getWordsNum()); unsetElement(copy, element); return fromBitMaskNoCopy(shrink(copy)); } else { return this; } }
BitSet<T> addElement(int element) { final long[] copy = copyExpand(1 + (element >> ADDRESS_BITS_PER_WORD)); setElement(copy, element); return fromBitMaskNoCopy(copy); }