4 * Functions useful for compression, mainly bitstreams.
11 #include "endianness.h"
13 typedef u16 output_bitbuf_t;
15 /* Structure to keep track of the current position in the compressed output. */
16 struct output_bitstream {
18 /* A variable to buffer writing bits to the output and is flushed to the
19 * compressed output when full. */
20 output_bitbuf_t bitbuf;
22 /* Number of free bits in @bitbuf */
28 /* Pointer to the next byte in the compressed output. */
32 /* Number of bytes left in the memory pointed to by @output. */
33 int num_bytes_remaining;
37 static inline int bitstream_put_byte(struct output_bitstream *ostream,
40 if (ostream->num_bytes_remaining < 1)
44 ostream->num_bytes_remaining--;
48 static inline int bitstream_put_two_bytes(struct output_bitstream *ostream,
51 if (ostream->num_bytes_remaining < 2)
53 *(u16*)ostream->output = cpu_to_le16(n);
55 ostream->num_bytes_remaining -= 2;
70 typedef uint (*lz_record_match_t)(uint, uint, void *, void *);
71 typedef uint (*lz_record_literal_t)(u8, void *);
73 extern uint lz_analyze_block(const u8 uncompressed_data[],
74 uint uncompressed_len,
76 lz_record_match_t record_match,
77 lz_record_literal_t record_literal,
78 void *record_match_arg1,
79 void *record_match_arg2,
80 void *record_literal_arg,
81 const struct lz_params *params);
83 extern int bitstream_put_bits(struct output_bitstream *ostream,
84 output_bitbuf_t bits, unsigned num_bits);
86 extern void init_output_bitstream(struct output_bitstream *ostream,
87 void *data, unsigned num_bytes);
89 extern int flush_output_bitstream(struct output_bitstream *ostream);
91 extern void make_canonical_huffman_code(uint num_syms, uint max_codeword_len,
92 const u32 freq_tab[], u8 lens[],
95 #endif /* _WIMLIB_COMP_H */