* decomp.h
*
* Functions useful for decompression, mainly bitstreams.
- *
- * Copyright (C) 2012 Eric Biggers
- *
- * wimlib - Library for working with WIM files
- *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option) any
- * later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along
- * with this library; if not, write to the Free Software Foundation, Inc., 59
- * Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _WIMLIB_DECOMP_H
/* A variable of length at least 32 bits that is used to hold bits that
* have been read from the stream. The bits are ordered from high-order
* to low-order; the next bit is always the high-order bit. */
- input_bitbuf_t bitbuf;
+ input_bitbuf_t bitbuf;
/* Pointer to the next byte to be retrieved from the input. */
- const u8 *data;
+ const u8 *data;
/* Number of bits in @bitbuf that are valid. */
- uint bitsleft;
+ uint bitsleft;
/* Number of words of data that are left. */
- uint data_bytes_left;
+ uint data_bytes_left;
};
/* Initializes a bitstream to receive its input from @data. */
int ret;
ret = bitstream_ensure_bits(istream, num_bits);
if (ret != 0) {
- ERROR("bitstream_read_bits(): Input buffer exhausted\n");
+ ERROR("bitstream_read_bits(): Input buffer exhausted");
return ret;
}
*n = bitstream_peek_bits(istream, num_bits);
wimlib_assert(istream->bitsleft < 32);
if (istream->data_bytes_left == 0) {
- ERROR("bitstream_read_byte(): Input buffer exhausted\n");
+ ERROR("bitstream_read_byte(): Input buffer exhausted");
return -1;
}
istream->data_bytes_left--;
extern int align_input_bitstream(struct input_bitstream *istream,
bool skip_word_if_aligned);
+extern int read_huffsym(struct input_bitstream *stream,
+ const u16 decode_table[],
+ const u8 lengths[],
+ unsigned num_symbols,
+ unsigned table_bits,
+ uint *n,
+ unsigned max_codeword_len);
+
+extern int make_huffman_decode_table(u16 decode_table[], uint num_syms,
+ uint num_bits, const u8 lengths[],
+ uint max_codeword_len);
+
#endif /* _WIMLIB_DECOMP_H */