p2lzw / decode.h
decode.h
Raw
#ifndef B6024EEC_47B1_43D8_A5E2_7E0CE27C1E65
#define B6024EEC_47B1_43D8_A5E2_7E0CE27C1E65

#include "lzw.h"

// Data Structures
typedef struct DecodeEntry 
{
  int prefix;
  unsigned char character;
} DecodeEntry;
typedef struct Stack 
{
  unsigned char *data;
  int top;
  int max_size;
} Stack;

// Decoder
void decode(void);

// String Table
DecodeEntry *initDecodeTable(int table_size);
int pruneDecodeTable(DecodeEntry **table, int table_size);

// Stack
Stack *initStack(int stack_size);
void push(Stack *stack, unsigned char value);
unsigned char pop(Stack *stack);
int isStackEmpty(Stack *stack);

// Bit Unpacking
int bitUnpacker(unsigned char byte);

// Debugging
void dumpDecodeTable(struct DecodeEntry *table, int nextCode, int table_size);

#endif /* B6024EEC_47B1_43D8_A5E2_7E0CE27C1E65 */