The updated decoder no longer requires that the number of symbols in the
alphabet be provided when decoding each symbol.
* lzms-decompress.c. */
static inline u16
read_huffsym(struct input_bitstream *istream, const u16 decode_table[],
* lzms-decompress.c. */
static inline u16
read_huffsym(struct input_bitstream *istream, const u16 decode_table[],
- unsigned num_syms, unsigned table_bits, unsigned max_codeword_len)
+ unsigned table_bits, unsigned max_codeword_len)
{
u16 entry;
u16 key_bits;
{
u16 entry;
u16 key_bits;
const u16 pretree_decode_table[])
{
return read_huffsym(istream, pretree_decode_table,
const u16 pretree_decode_table[])
{
return read_huffsym(istream, pretree_decode_table,
- LZX_PRECODE_NUM_SYMBOLS, LZX_PRECODE_TABLEBITS,
- LZX_MAX_PRE_CODEWORD_LEN);
+ LZX_PRECODE_TABLEBITS, LZX_MAX_PRE_CODEWORD_LEN);
}
/* Reads a Huffman-encoded symbol using the main tree. */
static inline u16
read_huffsym_using_maintree(struct input_bitstream *istream,
}
/* Reads a Huffman-encoded symbol using the main tree. */
static inline u16
read_huffsym_using_maintree(struct input_bitstream *istream,
- const struct lzx_tables *tables,
- unsigned num_main_syms)
+ const struct lzx_tables *tables)
{
return read_huffsym(istream, tables->maintree_decode_table,
{
return read_huffsym(istream, tables->maintree_decode_table,
LZX_MAINCODE_TABLEBITS, LZX_MAX_MAIN_CODEWORD_LEN);
}
LZX_MAINCODE_TABLEBITS, LZX_MAX_MAIN_CODEWORD_LEN);
}
const struct lzx_tables *tables)
{
return read_huffsym(istream, tables->lentree_decode_table,
const struct lzx_tables *tables)
{
return read_huffsym(istream, tables->lentree_decode_table,
- LZX_LENCODE_NUM_SYMBOLS,
LZX_LENCODE_TABLEBITS, LZX_MAX_LEN_CODEWORD_LEN);
}
LZX_LENCODE_TABLEBITS, LZX_MAX_LEN_CODEWORD_LEN);
}
const struct lzx_tables *tables)
{
return read_huffsym(istream, tables->alignedtree_decode_table,
const struct lzx_tables *tables)
{
return read_huffsym(istream, tables->alignedtree_decode_table,
- LZX_ALIGNEDCODE_NUM_SYMBOLS,
- LZX_ALIGNEDCODE_TABLEBITS,
- LZX_MAX_ALIGNED_CODEWORD_LEN);
+ LZX_ALIGNEDCODE_TABLEBITS, LZX_MAX_ALIGNED_CODEWORD_LEN);
* @block_type: The type of the block (LZX_BLOCKTYPE_VERBATIM or
* LZX_BLOCKTYPE_ALIGNED)
* @block_size: The size of the block, in bytes.
* @block_type: The type of the block (LZX_BLOCKTYPE_VERBATIM or
* LZX_BLOCKTYPE_ALIGNED)
* @block_size: The size of the block, in bytes.
- * @num_main_syms: Number of symbols in the main alphabet.
* @window: Pointer to the decompression window.
* @window_pos: The current position in the window. Will be 0 for the first
* block.
* @window: Pointer to the decompression window.
* @window_pos: The current position in the window. Will be 0 for the first
* block.
*/
static int
lzx_decompress_block(int block_type, unsigned block_size,
*/
static int
lzx_decompress_block(int block_type, unsigned block_size,
- unsigned num_main_syms,
u8 *window,
unsigned window_pos,
const struct lzx_tables *tables,
u8 *window,
unsigned window_pos,
const struct lzx_tables *tables,
end = window_pos + block_size;
while (window_pos < end) {
end = window_pos + block_size;
while (window_pos < end) {
- main_element = read_huffsym_using_maintree(istream, tables,
- num_main_syms);
+ main_element = read_huffsym_using_maintree(istream, tables);
if (main_element < LZX_NUM_CHARS) {
/* literal: 0 to LZX_NUM_CHARS - 1 */
window[window_pos++] = main_element;
if (main_element < LZX_NUM_CHARS) {
/* literal: 0 to LZX_NUM_CHARS - 1 */
window[window_pos++] = main_element;
LZX_DEBUG("LZX_BLOCKTYPE_ALIGNED");
ret = lzx_decompress_block(block_type,
block_size,
LZX_DEBUG("LZX_BLOCKTYPE_ALIGNED");
ret = lzx_decompress_block(block_type,
block_size,
uncompressed_data,
window_pos,
&ctx->tables,
uncompressed_data,
window_pos,
&ctx->tables,
bitstream_ensure_bits(istream, 16);
sym = read_huffsym(istream, decode_table,
bitstream_ensure_bits(istream, 16);
sym = read_huffsym(istream, decode_table,
- XPRESS_NUM_SYMBOLS, XPRESS_TABLEBITS,
- XPRESS_MAX_CODEWORD_LEN);
+ XPRESS_TABLEBITS, XPRESS_MAX_CODEWORD_LEN);
if (sym < XPRESS_NUM_CHARS) {
/* Literal */
uncompressed_data[curpos] = sym;
if (sym < XPRESS_NUM_CHARS) {
/* Literal */
uncompressed_data[curpos] = sym;