* for symbol i.
*/
void make_canonical_huffman_code(unsigned num_syms, unsigned max_codeword_len,
- const u32 freq_tab[], u8 lens[],
+ const freq_t freq_tab[], u8 lens[],
u16 codewords[])
{
/* We require at least 2 possible symbols in the alphabet to produce a
typedef u16 output_bitbuf_t;
+/* Assuming that WIM chunks are at most 32768 bytes, 16 bits is enough for any
+ * symbol frequency. */
+typedef u16 freq_t;
+
/* Structure to keep track of the current position in the compressed output. */
struct output_bitstream {
extern void make_canonical_huffman_code(unsigned num_syms,
unsigned max_codeword_len,
- const u32 freq_tab[],
+ const freq_t freq_tab[],
u8 lens[],
u16 codewords[]);
};
struct lzx_freq_tables {
- u32 main_freq_table[LZX_MAINTREE_NUM_SYMBOLS];
- u32 len_freq_table[LZX_LENTREE_NUM_SYMBOLS];
- u32 aligned_freq_table[LZX_ALIGNEDTREE_NUM_SYMBOLS];
+ freq_t main_freq_table[LZX_MAINTREE_NUM_SYMBOLS];
+ freq_t len_freq_table[LZX_LENTREE_NUM_SYMBOLS];
+ freq_t aligned_freq_table[LZX_ALIGNEDTREE_NUM_SYMBOLS];
};
/* Returns the LZX position slot that corresponds to a given formatted offset.
static u32 lzx_record_literal(u8 literal, void *__main_freq_tab)
{
- u32 *main_freq_tab = __main_freq_tab;
+ freq_t *main_freq_tab = __main_freq_tab;
main_freq_tab[literal]++;
return literal;
}
{
/* Frequencies of the length symbols, including the RLE symbols (NOT the
* actual lengths themselves). */
- unsigned pretree_freqs[LZX_PRETREE_NUM_SYMBOLS];
+ freq_t pretree_freqs[LZX_PRETREE_NUM_SYMBOLS];
u8 pretree_lens[LZX_PRETREE_NUM_SYMBOLS];
u16 pretree_codewords[LZX_PRETREE_NUM_SYMBOLS];
u8 output_syms[num_symbols * 2];
static u32 xpress_record_literal(u8 literal, void *__freq_tab)
{
- u32 *freq_tab = __freq_tab;
+ freq_t *freq_tab = __freq_tab;
freq_tab[literal]++;
return literal;
}
u32 len_hdr = min(adjusted_match_len, 0xf);
u32 offset_bsr = bsr32(match_offset);
u32 sym = len_hdr | (offset_bsr << 4) | XPRESS_NUM_CHARS;
- ((u32*)freq_tab)[sym]++;
+ ((freq_t*)freq_tab)[sym]++;
return adjusted_match_len | (match_offset << 16);
}
u8 *compressed_data = __compressed_data;
struct output_bitstream ostream;
u32 match_tab[uncompressed_len];
- u32 freq_tab[XPRESS_NUM_SYMBOLS];
+ freq_t freq_tab[XPRESS_NUM_SYMBOLS];
u16 codewords[XPRESS_NUM_SYMBOLS];
u8 lens[XPRESS_NUM_SYMBOLS];
unsigned num_matches;