*/
/*
- * Copyright (C) 2012 Eric Biggers
+ * Copyright (C) 2012, 2013 Eric Biggers
*
* This file is part of wimlib, a library for working with WIM files.
*
}
}
-/* Creates a canonical Huffman code from an array of symbol frequencies.
+/* make_canonical_huffman_code: - Creates a canonical Huffman code from an array
+ * of symbol frequencies.
*
* The algorithm used is similar to the well-known algorithm that builds a
* Huffman tree using a minheap. In that algorithm, the leaf nodes are
* 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
while (1) {
/* Lowest frequency node. */
- HuffmanNode *f1 = NULL;
+ HuffmanNode *f1;
/* Second lowest frequency node. */
- HuffmanNode *f2 = NULL;
+ HuffmanNode *f2;
- /* Get the lowest and second lowest frequency nodes from
- * the remaining leaves or from the intermediate nodes.
- * */
+ /* Get the lowest and second lowest frequency nodes from the
+ * remaining leaves or from the intermediate nodes. */
if (cur_leaf != end_leaf && (cur_inode == next_inode ||
cur_leaf->freq <= cur_inode->freq)) {
f2 = (HuffmanNode*)cur_leaf++;
} else if (cur_inode != next_inode) {
f2 = cur_inode++;
- }
-
- /* All nodes used up! */
- if (f1 == NULL || f2 == NULL)
+ } else {
+ /* All nodes used up! */
break;
+ }
/* next_inode becomes the parent of f1 and f2. */