in java/src/main/java/com/epam/deltix/zstd/Huffman.java [278:304]
private void decodeTail(final ByteBuffer inputBase, final int startAddress, int currentAddress,
int bitsConsumed, long bits, final ByteBuffer outputBase, int outputAddress, final int outputLimit) {
final int tableLog = this.tableLog;
final byte[] numbersOfBits = this.numbersOfBits;
final byte[] symbols = this.symbols;
// closer to the end
while (outputAddress < outputLimit) {
final BitStream.Loader loader = new BitStream.Loader(inputBase, startAddress, currentAddress, bits, bitsConsumed);
final boolean done = loader.load();
bitsConsumed = loader.getBitsConsumed();
bits = loader.getBits();
currentAddress = loader.getCurrentAddress();
if (done) {
break;
}
bitsConsumed = decodeSymbol(outputBase, outputAddress++, bits, bitsConsumed, tableLog, numbersOfBits, symbols);
}
// not more data in bit stream, so no need to reload
while (outputAddress < outputLimit) {
bitsConsumed = decodeSymbol(outputBase, outputAddress++, bits, bitsConsumed, tableLog, numbersOfBits, symbols);
}
verify(isEndOfStream(startAddress, currentAddress, bitsConsumed), startAddress, "Bit stream is not fully consumed");
}