21#import "OFInvalidFormatException.h"
23OF_ASSUME_NONNULL_BEGIN
25typedef struct _OFHuffmanTree {
26 struct _OFHuffmanTree *_Nullable leaves[2];
32OFHuffmanTreeWalk(
id _Nullable stream,
33 bool (*bitReader)(
id _Nullable, uint16_t *_Nonnull, uint8_t),
34 OFHuffmanTree _Nonnull *_Nonnull tree, uint16_t *_Nonnull value)
36 OFHuffmanTree iter = *tree;
39 while (iter->value == 0xFFFF) {
40 if OF_UNLIKELY (!bitReader(stream, &bits, 1)) {
45 if OF_UNLIKELY (iter->leaves[bits] == NULL)
48 iter = iter->leaves[bits];
58extern OFHuffmanTree _Nonnull OFHuffmanTreeNew(uint8_t lengths[_Nonnull],
60extern OFHuffmanTree _Nonnull OFHuffmanTreeNewSingle(uint16_t value);
61extern void OFHuffmanTreeFree(OFHuffmanTree _Nonnull tree);