]> wimlib.net Git - wimlib/blobdiff - src/comp.h
Various cleanups
[wimlib] / src / comp.h
index af17826310e093f9b3a668731cdb66167f54c73a..37b1f9922bfecc1c53c8687ff38965804aa93331 100644 (file)
@@ -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,46 +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(unsigned num_syms,
+                                       unsigned max_codeword_len,
+                                       const u32 freq_tab[],
+                                       u8 lens[],
+                                       u16 codewords[]);
+
 #endif /* _WIMLIB_COMP_H */