put method
void
put(
- int number,
- int length
)
Implementation
void put(int number, int length) {
if (length == 0) return;
assert(length > 0, "length must be strictly positive");
assert(number >= 0, "number must be non-negative");
int bitIndex = _length;
final int endBitIndex = bitIndex + length;
final int neededBytes = (endBitIndex + 7) >> 3;
_ensureCapacity(neededBytes);
if (length == 8 && (bitIndex & 7) == 0 && number >= 0 && number <= 255) {
_buffer[bitIndex >> 3] = number;
_length = endBitIndex;
return;
}
int bitsLeft = length;
while (bitsLeft > 0) {
final int bufIndex = bitIndex >> 3;
final int leftBitIndex = bitIndex & 7;
final int available = 8 - leftBitIndex;
final int bitsToWrite = bitsLeft < available ? bitsLeft : available;
final int shift = bitsLeft - bitsToWrite;
final int bits = (number >> shift) & ((1 << bitsToWrite) - 1);
final int posShift = 8 - leftBitIndex - bitsToWrite;
_buffer[bufIndex] |= bits << posShift;
bitsLeft -= bitsToWrite;
bitIndex += bitsToWrite;
}
_length = endBitIndex;
}