X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fdecomp.h;h=c039582c79e8aa2228eeb0ace2ea322acc3659cb;hp=ed828c428463255e06ab3b5afe031aac307fd102;hb=14c65f15f708c27dc434db1f0d112fad2a0b007c;hpb=885632f08c75c1d7bb5d25436231c78f6ad7e0c0 diff --git a/src/decomp.h b/src/decomp.h index ed828c42..c039582c 100644 --- a/src/decomp.h +++ b/src/decomp.h @@ -2,23 +2,6 @@ * 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 @@ -36,16 +19,16 @@ struct input_bitstream { /* 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. */ @@ -116,7 +99,7 @@ static inline int bitstream_read_bits(struct input_bitstream *istream, 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); @@ -137,7 +120,7 @@ static inline int bitstream_read_byte(struct input_bitstream *istream) 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--; @@ -168,4 +151,16 @@ extern int bitstream_read_bytes(struct input_bitstream *istream, size_t n, 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 */