@Override public BitSet<T> intersect(Set<? extends T> elements) { Objects.requireNonNull(elements, "elements is null"); if (isEmpty()) { return this; } else if (elements.isEmpty()) { return createEmpty(); } else { final int size = size(); if (size <= elements.size()) { return retainAll(elements); } else { final BitSet<T> results = createFromAll(elements).retainAll(this); return (size == results.size()) ? this : results; } } }
@Override public BitSet<T> intersect(Set<? extends T> elements) { Objects.requireNonNull(elements, "elements is null"); if (isEmpty()) { return this; } else if (elements.isEmpty()) { return createEmpty(); } else { final int size = size(); if (size <= elements.size()) { return retainAll(elements); } else { final BitSet<T> results = createFromAll(elements).retainAll(this); return (size == results.size()) ? this : results; } } }
@SuppressWarnings("unchecked") BitSet<T> createFromAll(Iterable<? extends T> values) { return values instanceof BitSet ? (BitSet<T>) values : createEmpty().addAll(values); }
@Override public BitSet<T> takeRight(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().takeRight(n)); } }
@Override public BitSet<T> take(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().take(n)); } }
BitSet<T> fromBitMaskNoCopy(long[] elements) { switch (elements.length) { case 0: return createEmpty(); case 1: return new BitSet1<>(fromInt, toInt, elements[0]); case 2: return new BitSet2<>(fromInt, toInt, elements[0], elements[1]); default: return new BitSetN<>(fromInt, toInt, elements); } }
@Override public BitSet<T> dropRight(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().dropRight(n)); } }
@Override public BitSet<T> drop(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().drop(n)); } }
@SuppressWarnings("unchecked") BitSet<T> createFromAll(Iterable<? extends T> values) { return values instanceof BitSet ? (BitSet<T>) values : createEmpty().addAll(values); }
@Override public BitSet<T> drop(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().drop(n)); } }
BitSet<T> fromBitMaskNoCopy(long[] elements) { switch (elements.length) { case 0: return createEmpty(); case 1: return new BitSet1<>(fromInt, toInt, elements[0]); case 2: return new BitSet2<>(fromInt, toInt, elements[0], elements[1]); default: return new BitSetN<>(fromInt, toInt, elements); } }
@Override public BitSet<T> takeRight(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().takeRight(n)); } }
@Override public BitSet<T> take(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().take(n)); } }
@Override public BitSet<T> dropRight(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().dropRight(n)); } }