|
|
@ -30,7 +30,7 @@ import java.util.Objects;
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* An appendable sequence of bits. Bits are packed in big endian within a byte.
|
|
|
|
* An appendable sequence of bits. Bits are packed in big endian within a byte.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
final class BitBuffer {
|
|
|
|
public final class BitBuffer implements Cloneable {
|
|
|
|
|
|
|
|
|
|
|
|
/*---- Fields ----*/
|
|
|
|
/*---- Fields ----*/
|
|
|
|
|
|
|
|
|
|
|
@ -57,6 +57,14 @@ final class BitBuffer {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Returns the bit at the given index, yielding 0 or 1, or throwing IndexOutOfBoundsException.
|
|
|
|
|
|
|
|
public int getBit(int index) {
|
|
|
|
|
|
|
|
if (index < 0 || index > bitLength)
|
|
|
|
|
|
|
|
throw new IndexOutOfBoundsException();
|
|
|
|
|
|
|
|
return data.get(index) ? 1 : 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Returns a copy of all bytes, padding up to the nearest byte. Bits are packed in big endian within a byte.
|
|
|
|
// Returns a copy of all bytes, padding up to the nearest byte. Bits are packed in big endian within a byte.
|
|
|
|
public byte[] getBytes() {
|
|
|
|
public byte[] getBytes() {
|
|
|
|
byte[] result = new byte[(bitLength + 7) / 8];
|
|
|
|
byte[] result = new byte[(bitLength + 7) / 8];
|
|
|
@ -85,4 +93,16 @@ final class BitBuffer {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Returns a copy of this bit buffer object.
|
|
|
|
|
|
|
|
public BitBuffer clone() {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
BitBuffer result = (BitBuffer)super.clone();
|
|
|
|
|
|
|
|
result.data = (BitSet)result.data.clone();
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
} catch (CloneNotSupportedException e) {
|
|
|
|
|
|
|
|
throw new AssertionError(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|