ObjFW  Diff

Differences From Artifact [2155b8e3b4]:

To Artifact [fd05cd38a9]:


18
19
20
21
22
23
24
25
26


27
28

29

30
31

32
33

34
35

36
37
38
39
40
41
42
18
19
20
21
22
23
24


25
26
27

28
29
30
31

32
33

34
35

36
37
38
39
40
41
42
43







-
-
+
+

-
+

+

-
+

-
+

-
+








#import "macros.h"

#import "OFInvalidFormatException.h"

OF_ASSUME_NONNULL_BEGIN

struct of_huffman_tree {
	struct of_huffman_tree *_Nullable leaves[2];
typedef struct _OFHuffmanTree {
	struct _OFHuffmanTree *_Nullable leaves[2];
	uint16_t value;
};
} *OFHuffmanTree;

/* Inlined for performance. */
static OF_INLINE bool
of_huffman_tree_walk(id _Nullable stream,
OFHuffmanTreeWalk(id _Nullable stream,
    bool (*bitReader)(id _Nullable, uint16_t *_Nonnull, uint8_t),
    struct of_huffman_tree *_Nonnull *_Nonnull tree, uint16_t *_Nonnull value)
    OFHuffmanTree _Nonnull *_Nonnull tree, uint16_t *_Nonnull value)
{
	struct of_huffman_tree *iter = *tree;
	OFHuffmanTree iter = *tree;
	uint16_t bits;

	while (iter->value == 0xFFFF) {
		if OF_UNLIKELY (!bitReader(stream, &bits, 1)) {
			*tree = iter;
			return false;
		}
50
51
52
53
54
55
56
57
58

59
60
61



62
63
64
65
66
51
52
53
54
55
56
57


58



59
60
61
62
63
64
65
66







-
-
+
-
-
-
+
+
+





	*value = iter->value;
	return true;
}

#ifdef __cplusplus
extern "C" {
#endif
extern struct of_huffman_tree *_Nonnull of_huffman_tree_construct(
    uint8_t lengths[_Nonnull], uint16_t count);
extern OFHuffmanTree _Nonnull OFHuffmanTreeNew(uint8_t lengths[_Nonnull],
extern struct of_huffman_tree *_Nonnull of_huffman_tree_construct_single(
    uint16_t value);
extern void of_huffman_tree_release(struct of_huffman_tree *_Nonnull tree);
    uint16_t count);
extern OFHuffmanTree _Nonnull OFHuffmanTreeNewSingle(uint16_t value);
extern void OFHuffmanTreeFree(OFHuffmanTree _Nonnull tree);
#ifdef __cplusplus
}
#endif

OF_ASSUME_NONNULL_END