@Override public T head() { int offset = 0; int element = 0; for (int i = 0; i < getWordsNum(); i++) { if (elements[i] == 0) { offset += BITS_PER_WORD; } else { element = offset + Long.numberOfTrailingZeros(elements[i]); break; } } return fromInt.apply(element); }
@Override public T head() { int offset = 0; int element = 0; for (int i = 0; i < getWordsNum(); i++) { if (elements[i] == 0) { offset += BITS_PER_WORD; } else { element = offset + Long.numberOfTrailingZeros(elements[i]); break; } } return fromInt.apply(element); }
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> add(T t) { if (contains(t)) { return this; } else { return addElement(toInt.apply(t)); } } }
BitSetN(Function1<Integer, T> fromInt, Function1<T, Integer> toInt, long[] elements) { super(fromInt, toInt); this.elements = elements; this.len = calcLength(elements); }
BitSetN(Function1<Integer, T> fromInt, Function1<T, Integer> toInt, long[] elements) { super(fromInt, toInt); this.elements = elements; this.len = calcLength(elements); }
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> add(T t) { if (contains(t)) { return this; } else { return addElement(toInt.apply(t)); } } }