#ifndef SMK_HUFFTREE_H
#define SMK_HUFFTREE_H
#include "smk_bitstream.h"
struct smk_huff8_t;
struct smk_huff16_t;
#define smk_huff8_build(bs,t) \
{ \
if (!(t = _smk_huff8_build(bs))) \
{ \
fprintf(stderr, "libsmacker::smk_huff8_build(" #bs ", " #t ") - ERROR (file: %s, line: %lu)\n", __FILE__, (unsigned long)__LINE__); \
goto error; \
} \
}
struct smk_huff8_t* _smk_huff8_build(struct smk_bit_t* bs);
#define smk_huff8_lookup(bs,t,s) \
{ \
if ((short)(s = _smk_huff8_lookup(bs, t)) < 0) \
{ \
fprintf(stderr, "libsmacker::smk_huff8_lookup(" #bs ", " #t ", " #s ") - ERROR (file: %s, line: %lu)\n", __FILE__, (unsigned long)__LINE__); \
goto error; \
} \
}
short _smk_huff8_lookup(struct smk_bit_t* bs, const struct smk_huff8_t* t);
void smk_huff8_free(struct smk_huff8_t* t);
#define smk_huff16_build(bs,t) \
{ \
if (!(t = _smk_huff16_build(bs))) \
{ \
fprintf(stderr, "libsmacker::smk_huff16_build(" #bs ", " #t ") - ERROR (file: %s, line: %lu)\n", __FILE__, (unsigned long)__LINE__); \
goto error; \
} \
}
struct smk_huff16_t* _smk_huff16_build(struct smk_bit_t* bs);
#define smk_huff16_lookup(bs,t,s) \
{ \
if ((s = _smk_huff16_lookup(bs, t)) < 0) \
{ \
fprintf(stderr, "libsmacker::smk_huff16_lookup(" #bs ", " #t ", " #s ") - ERROR (file: %s, line: %lu)\n", __FILE__, (unsigned long)__LINE__); \
goto error; \
} \
}
long _smk_huff16_lookup(struct smk_bit_t* bs, struct smk_huff16_t* big);
void smk_huff16_reset(struct smk_huff16_t* big);
void smk_huff16_free(struct smk_huff16_t* big);
#endif