Commit 067d8524 authored by Mike Iovine's avatar Mike Iovine
Browse files

Add header file for inflate

parent 2bac0fe7
No related merge requests found
Showing with 68 additions and 0 deletions
+68 -0
#ifndef _INFLATE_C_
#define _INFLATE_C_
/* Maximum length for any Huffman code */
#define MAX_LENGTH 15
typedef struct huffman {
/* bl_counts[i] = number of codes of length i */
int bl_counts[MAX_LENGTH + 1];
/* This stores the alphabet.
* alphabet[i] returns an array of alphabet symbols of length bl_counts[i].
*/
int *alphabet[MAX_LENGTH + 1];
/* Suppose we are reading a code and we want an index into the alphabet array.
* These are basically the numerical offsets for such an index.
* So if the code we are reading has value c and is of length i,
* its alphabet character is indexed by (c - min_codes[i]).
*/
int min_codes[MAX_LENGTH + 1];
} huffman_t;
/* Create a Huffman mapping from a sequence of lengths. */
huffman_t *make_huffman(int *lens, int *alphabet, int n_symbols);
/* Clean up a heap allocated Huffman map */
void destroy_huffman(huffman_t *hf);
/* Get the next bit from a buffer of bytes read from memory */
int get_next_bit(char *buf);
/*
* Get the numerical value of n bits read from a buffer.
* If reverse is set true, interpret the bytes in
* reverse stream order.
*/
int get_n_bits(char *buf, int n, bool reverse);
/*
* Given a Huffman map, read ONE code from the buffer and
* return its numerical value in stream order.
*/
int read_chunk(char *buf, huffman_t hf);
/*
* For the DYNAMIC Huffman type.
* Read a sequence of code lengths (between 0 and 18) from the buffer.
* The number of codes read is specified by "num_codes", however,
* the returned sequence of lengths is 0-padded to the length
* of the whole alphabet given by "num_symbols".
*/
int *read_lens(char *buf, huffman_t *hf_codes,
int num_symbols, int num_codes);
/*
* Read a single block from the buffer, and write the deflated
* results to "out".
*/
void read_block(char *buf, FILE *out);
/*
* Inflate the file fp.
*/
void inflate(FILE *fp, char *fname);
#endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment