X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fcomp.h;h=37b1f9922bfecc1c53c8687ff38965804aa93331;hb=d212325562fd5de72b7c768532bd8c631db897d3;hp=7b28e511d637ac8f15aa80c9cb434186e25453e5;hpb=81ea19151423fa87b8698dd3fa8a5274066a76c2;p=wimlib diff --git a/src/comp.h b/src/comp.h index 7b28e511..37b1f992 100644 --- a/src/comp.h +++ b/src/comp.h @@ -2,23 +2,6 @@ * comp.h * * Functions useful for compression, 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_COMP_H @@ -37,7 +20,7 @@ struct output_bitstream { output_bitbuf_t bitbuf; /* Number of free bits in @bitbuf */ - uint free_bits; + unsigned free_bits; u8 *bit_output; u8 *next_bit_output; @@ -50,11 +33,10 @@ struct output_bitstream { int num_bytes_remaining; }; - static inline int bitstream_put_byte(struct output_bitstream *ostream, - u8 n) + u8 n) { - if (ostream->num_bytes_remaining == 0) + if (ostream->num_bytes_remaining < 1) return 1; *ostream->output = n; ostream->output++; @@ -63,50 +45,51 @@ static inline int bitstream_put_byte(struct output_bitstream *ostream, } static inline int bitstream_put_two_bytes(struct output_bitstream *ostream, - u16 n) + u16 n) { if (ostream->num_bytes_remaining < 2) return 1; - *(u16*)ostream->output = to_le16(n); + *(u16*)ostream->output = cpu_to_le16(n); ostream->output += 2; ostream->num_bytes_remaining -= 2; return 0; } - struct lz_params { - uint min_match; - uint max_match; - uint nice_match; - uint good_match; - uint max_chain_len; - uint max_lazy_match; - uint too_far; + unsigned min_match; + unsigned max_match; + unsigned nice_match; + unsigned good_match; + unsigned max_chain_len; + unsigned max_lazy_match; + unsigned too_far; }; - -typedef uint (*lz_record_match_t)(uint, uint, void *, void *); -typedef uint (*lz_record_literal_t)(u8, void *); - -extern uint lz_analyze_block(const u8 uncompressed_data[], - uint uncompressed_len, - u32 match_tab[], - lz_record_match_t record_match, - lz_record_literal_t record_literal, - void *record_match_arg1, - void *record_match_arg2, - void *record_literal_arg, - const struct lz_params *params); - -extern int bitstream_put_bits(struct output_bitstream *ostream, + +typedef unsigned (*lz_record_match_t)(unsigned, unsigned, void *, void *); +typedef unsigned (*lz_record_literal_t)(u8, void *); + +extern unsigned lz_analyze_block(const u8 uncompressed_data[], + unsigned uncompressed_len, + u32 match_tab[], + lz_record_match_t record_match, + lz_record_literal_t record_literal, + void *record_match_arg1, + void *record_match_arg2, + void *record_literal_arg, + const struct lz_params *params); + +extern int bitstream_put_bits(struct output_bitstream *ostream, output_bitbuf_t bits, unsigned num_bits); extern void init_output_bitstream(struct output_bitstream *ostream, - void *data, unsigned num_bytes); + void *data, unsigned num_bytes); extern int flush_output_bitstream(struct output_bitstream *ostream); -extern void make_canonical_huffman_code(uint num_syms, uint max_codeword_len, - const u32 freq_tab[], u8 lens[], +extern void make_canonical_huffman_code(unsigned num_syms, + unsigned max_codeword_len, + const u32 freq_tab[], + u8 lens[], u16 codewords[]); #endif /* _WIMLIB_COMP_H */