/** * Grows the backing array (<code>long[]</code>) so that it can hold the requested * bits. Mostly applicable when relying on the <code>unsafe</code> methods, * including {@link #unsafeGet(int)} and {@link #unsafeClear(int)}. * * @param bits number of bits to accomodate */ public void ensureCapacity(int bits) { checkCapacity(bits >>> 6); }
/** * Grows the backing array (<code>long[]</code>) so that it can hold the requested * bits. Mostly applicable when relying on the <code>unsafe</code> methods, * including {@link #unsafeGet(int)} and {@link #unsafeClear(int)}. * * @param bits number of bits to accomodate */ public void ensureCapacity(int bits) { checkCapacity(bits >>> 6); }
/** Creates a bit set whose initial size is large enough to explicitly represent bits with indices in the range 0 through * nbits-1. * @param nbits the initial size of the bit set */ public BitVector(int nbits) { checkCapacity(nbits >>> 6); }
/** @param index the index of the bit to set * @throws ArrayIndexOutOfBoundsException if index < 0 */ public void set(int index) { final int word = index >>> 6; checkCapacity(word); words[word] |= 1L << index; }
/** @param index the index of the bit to flip */ public void flip(int index) { final int word = index >>> 6; checkCapacity(word); words[word] ^= 1L << index; }
/** Creates a bit set whose initial size is large enough to explicitly represent bits with indices in the range 0 through * nbits-1. * @param nbits the initial size of the bit set */ public BitVector(int nbits) { checkCapacity(nbits >>> 6); }
/** @param index the index of the bit to set * @throws ArrayIndexOutOfBoundsException if index < 0 */ public void set(int index) { final int word = index >>> 6; checkCapacity(word); words[word] |= 1L << index; }
/** @param index the index of the bit to flip */ public void flip(int index) { final int word = index >>> 6; checkCapacity(word); words[word] ^= 1L << index; }
/** Performs a logical <b>OR</b> of this bit set with the bit set argument. This bit set is modified so that a bit in it has the * value true if and only if it either already had the value true or the corresponding bit in the bit set argument has the * value true. * @param other a bit set */ public void or(BitVector other) { int commonWords = Math.min(words.length, other.words.length); for (int i = 0; commonWords > i; i++) { words[i] |= other.words[i]; } if (commonWords < other.words.length) { checkCapacity(other.words.length); for (int i = commonWords, s = other.words.length; s > i; i++) { words[i] = other.words[i]; } } }
/** Performs a logical <b>XOR</b> of this bit set with the bit set argument. This bit set is modified so that a bit in it has * the value true if and only if one of the following statements holds: * <ul> * <li>The bit initially has the value true, and the corresponding bit in the argument has the value false.</li> * <li>The bit initially has the value false, and the corresponding bit in the argument has the value true.</li> * </ul> * @param other */ public void xor(BitVector other) { int commonWords = Math.min(words.length, other.words.length); for (int i = 0; commonWords > i; i++) { words[i] ^= other.words[i]; } if (commonWords < other.words.length) { checkCapacity(other.words.length); for (int i = commonWords, s = other.words.length; s > i; i++) { words[i] = other.words[i]; } } }
/** Performs a logical <b>OR</b> of this bit set with the bit set argument. This bit set is modified so that a bit in it has the * value true if and only if it either already had the value true or the corresponding bit in the bit set argument has the * value true. * @param other a bit set */ public void or(BitVector other) { int commonWords = Math.min(words.length, other.words.length); for (int i = 0; commonWords > i; i++) { words[i] |= other.words[i]; } if (commonWords < other.words.length) { checkCapacity(other.words.length); for (int i = commonWords, s = other.words.length; s > i; i++) { words[i] = other.words[i]; } } }
/** Performs a logical <b>XOR</b> of this bit set with the bit set argument. This bit set is modified so that a bit in it has * the value true if and only if one of the following statements holds: * <ul> * <li>The bit initially has the value true, and the corresponding bit in the argument has the value false.</li> * <li>The bit initially has the value false, and the corresponding bit in the argument has the value true.</li> * </ul> * @param other */ public void xor(BitVector other) { int commonWords = Math.min(words.length, other.words.length); for (int i = 0; commonWords > i; i++) { words[i] ^= other.words[i]; } if (commonWords < other.words.length) { checkCapacity(other.words.length); for (int i = commonWords, s = other.words.length; s > i; i++) { words[i] = other.words[i]; } } }