@Override public BitSet<T> add(T t) { final int element = toInt.apply(t); if (element < 0) { throw new IllegalArgumentException("bitset element must be >= 0"); } final long mask = 1L << element; if (element < BITS_PER_WORD) { if ((elements1 & mask) != 0) { return this; } else { return new BitSet2<>(fromInt, toInt, elements1 | mask, elements2); } } else if (element < 2 * BITS_PER_WORD) { if ((elements2 & mask) != 0) { return this; } else { return new BitSet2<>(fromInt, toInt, elements1, elements2 | mask); } } else { return addElement(element); } } }
@Override public BitSet<T> add(T t) { final int element = toInt.apply(t); if (element < 0) { throw new IllegalArgumentException("bitset element must be >= 0"); } final long mask = 1L << element; if (element < BITS_PER_WORD) { if ((elements1 & mask) != 0) { return this; } else { return new BitSet2<>(fromInt, toInt, elements1 | mask, elements2); } } else if (element < 2 * BITS_PER_WORD) { if ((elements2 & mask) != 0) { return this; } else { return new BitSet2<>(fromInt, toInt, elements1, elements2 | mask); } } else { return addElement(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); } }
public BitSet<T> of(T t) { final int value = toInt.apply(t); if (value < BitSetModule.BITS_PER_WORD) { return new BitSetModule.BitSet1<>(fromInt, toInt, 1L << value); } else if (value < 2 * BitSetModule.BITS_PER_WORD) { return new BitSetModule.BitSet2<>(fromInt, toInt, 0L, 1L << value); } else { return empty().add(t); } }
public BitSet<T> of(T t) { final int value = toInt.apply(t); if (value < BitSetModule.BITS_PER_WORD) { return new BitSetModule.BitSet1<>(fromInt, toInt, 1L << value); } else if (value < 2 * BitSetModule.BITS_PER_WORD) { return new BitSetModule.BitSet2<>(fromInt, toInt, 0L, 1L << value); } else { return empty().add(t); } }
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); } }