in lib/src/hpack/huffman.dart [93:134]
List<int> encode(List<int> bytes) {
var buffer = BytesBuilder();
var currentByte = 0;
var currentBitOffset = 7;
void writeValue(int value, int numBits) {
var i = numBits - 1;
while (i >= 0) {
if (currentBitOffset == 7 && i >= 7) {
assert(currentByte == 0);
buffer.addByte((value >> (i - 7)) & 0xff);
currentBitOffset = 7;
currentByte = 0;
i -= 8;
} else {
currentByte |= ((value >> i) & 1) << currentBitOffset;
currentBitOffset--;
if (currentBitOffset == -1) {
buffer.addByte(currentByte);
currentBitOffset = 7;
currentByte = 0;
}
i--;
}
}
}
for (var i = 0; i < bytes.length; i++) {
var byte = bytes[i];
var value = _codewords[byte];
writeValue(value.encodedBytes, value.numBits);
}
if (currentBitOffset < 7) {
writeValue(0xff, 1 + currentBitOffset);
}
return buffer.takeBytes();
}