* 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;
+ unsigned bitsleft;
/* Number of words of data that are left. */
- uint data_bytes_left;
+ unsigned data_bytes_left;
};
/* Initializes a bitstream to receive its input from @data. */
-static inline void init_input_bitstream(struct input_bitstream *istream,
- const void *data, uint num_data_bytes)
+static inline void init_input_bitstream(struct input_bitstream *istream,
+ const void *data, unsigned num_data_bytes)
{
istream->bitbuf = 0;
istream->bitsleft = 0;
}
/* Ensures that the bit buffer contains @num_bits bits. */
-static inline int bitstream_ensure_bits(struct input_bitstream *istream,
- uint num_bits)
+static inline int bitstream_ensure_bits(struct input_bitstream *istream,
+ unsigned num_bits)
{
wimlib_assert(num_bits <= 16);
if (istream->data_bytes_left < 2)
return 1;
- uint shift = sizeof(input_bitbuf_t) * 8 - 16 -
- istream->bitsleft;
- istream->bitbuf |= (input_bitbuf_t)to_le16(
+ unsigned shift = sizeof(input_bitbuf_t) * 8 - 16 -
+ istream->bitsleft;
+ istream->bitbuf |= (input_bitbuf_t)le16_to_cpu(
*(u16*)istream->data) << shift;
istream->data += 2;
istream->bitsleft += 16;
/* Returns the next @num_bits bits in the bit buffer. It must contain at least
* @num_bits bits to call this function. */
-static inline uint bitstream_peek_bits(const struct input_bitstream *istream,
- uint num_bits)
+static inline unsigned
+bitstream_peek_bits(const struct input_bitstream *istream, unsigned num_bits)
{
if (num_bits == 0)
return 0;
/* Removes @num_bits bits from the bit buffer. It must contain at least
* @num_bits bits to call this function. */
-static inline void bitstream_remove_bits(struct input_bitstream *istream,
- uint num_bits)
+static inline void bitstream_remove_bits(struct input_bitstream *istream,
+ unsigned num_bits)
{
istream->bitbuf <<= num_bits;
istream->bitsleft -= num_bits;
}
/* Reads and returns @num_bits bits from the input bitstream. */
-static inline int bitstream_read_bits(struct input_bitstream *istream,
- uint num_bits, uint *n)
+static inline int bitstream_read_bits(struct input_bitstream *istream,
+ unsigned num_bits, unsigned *n)
{
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);
* compressed bitstream. These bytes are basically separate from the bitstream,
* as they come AFTER the bits that are currently in the buffer variable (based
* on reading 16 bits at a time), even though the buffer variable may not be
- * empty.
+ * empty.
*
* This function returns the next such literal length byte in the input
* bitstream. Returns -1 if we are at the end of the bitstream. */
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--;
/* Reads @num_bits bits from the bit buffer without checking to see if that many
* bits are in the buffer or not. */
-static inline uint bitstream_read_bits_nocheck(struct input_bitstream *istream,
- uint num_bits)
+static inline unsigned
+bitstream_read_bits_nocheck(struct input_bitstream *istream, unsigned num_bits)
{
- uint n = bitstream_peek_bits(istream, num_bits);
+ unsigned n = bitstream_peek_bits(istream, num_bits);
bitstream_remove_bits(istream, num_bits);
return n;
}
{
bitstream_remove_bits(istream, istream->bitsleft);
istream->bitsleft = 0;
- istream->bitbuf = 0;
+ istream->bitbuf = 0;
}
-extern int bitstream_read_bytes(struct input_bitstream *istream, size_t n,
+extern int bitstream_read_bytes(struct input_bitstream *istream, size_t n,
void *dest);
-extern int align_input_bitstream(struct input_bitstream *istream,
+extern int align_input_bitstream(struct input_bitstream *istream,
bool skip_word_if_aligned);
-extern int read_huffsym(struct input_bitstream *stream,
+extern int read_huffsym(struct input_bitstream *stream,
const u16 decode_table[],
const u8 lengths[],
unsigned num_symbols,
unsigned table_bits,
- uint *n,
+ unsigned *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);
+extern int make_huffman_decode_table(u16 decode_table[], unsigned num_syms,
+ unsigned num_bits, const u8 lengths[],
+ unsigned max_codeword_len);
#endif /* _WIMLIB_DECOMP_H */