webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
state.h
Go to the documentation of this file.
1 /* Copyright 2015 Google Inc. All Rights Reserved.
2 
3  Distributed under MIT license.
4  See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5 */
6 
7 /* Brotli state for partial streaming decoding. */
8 
9 #ifndef BROTLI_DEC_STATE_H_
10 #define BROTLI_DEC_STATE_H_
11 
12 #include "./bit_reader.h"
13 #include "./huffman.h"
14 #include "./types.h"
15 #include "./port.h"
16 
17 #if defined(__cplusplus) || defined(c_plusplus)
18 extern "C" {
19 #endif
20 
21 typedef enum {
46 
47 typedef enum {
57 
58 typedef enum {
62 
63 typedef enum {
67 
68 typedef enum {
75 
76 typedef enum {
84 
85 typedef enum {
90 
91 typedef enum {
95 
97  BrotliRunningState state;
98 
99  /* This counter is reused for several disjoint loops. */
101 
103 
107 
108  /* Temporary storage for remaining input. */
109  union {
112  } buffer;
114 
115  int pos;
122  int dist_rb[4];
132 
133  /* This ring buffer holds a few past copy distances that will be used by */
134  /* some special distance codes. */
140  /* This is true if the literal context map histogram type always matches the
141  block type. It is then not needed to keep the context (faster decoding). */
158 
161 
162  /* For partial write operations */
163  size_t rb_roundtrips; /* How many times we went around the ringbuffer */
164  size_t partial_pos_out; /* How much output to the user in total (<= rb) */
165 
166  /* For ReadHuffmanCode */
170 
172  /* List of of symbol chains. */
174  /* Storage from symbol_lists. */
177  /* Tails of symbol chains. */
178  int next_symbol[32];
180  /* Population counts for the code lengths */
182 
183  /* For HuffmanTreeGroupDecode */
186 
187  /* For DecodeContextMap */
192 
193  /* For InverseMoveToFrontTransform */
195  uint8_t mtf[256 + 4];
196 
197  /* For custom dictionaries */
200 
201  /* less used attributes are in the end of this struct */
202  /* States inside function calls */
203  BrotliRunningMetablockHeaderState substate_metablock_header;
204  BrotliRunningTreeGroupState substate_tree_group;
205  BrotliRunningContextMapState substate_context_map;
206  BrotliRunningUncompressedState substate_uncompressed;
207  BrotliRunningHuffmanState substate_huffman;
208  BrotliRunningDecodeUint8State substate_decode_uint8;
209  BrotliRunningReadBlockLengthState substate_read_block_length;
210 
216 
220 
222 };
223 
225 #define BrotliState BrotliStateInternal
226 
234  HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t ntrees);
237 
238 #if defined(__cplusplus) || defined(c_plusplus)
239 } /* extern "C" */
240 #endif
241 
242 #endif /* BROTLI_DEC_STATE_H_ */
BrotliRunningMetablockHeaderState
Definition: state.h:47
Definition: state.h:24
GLboolean GLuint group
Definition: gl2ext.h:780
const uint8_t * context_lookup1
Definition: state.h:128
Definition: state.h:28
Definition: state.h:38
uint8_t * context_modes
Definition: state.h:219
uint8_t code_length_code_lengths[18]
Definition: state.h:179
unsigned long long uint64_t
Definition: ptypes.h:120
Definition: state.h:42
Definition: state.h:40
#define BROTLI_INTERNAL
Definition: port.h:146
void(* brotli_free_func)(void *opaque, void *address)
Definition: types.h:36
uint32_t block_length[3]
Definition: state.h:146
uint32_t num_literal_htrees
Definition: state.h:217
uint64_t u64
Definition: state.h:110
Definition: state.h:26
BrotliRunningState state
Definition: state.h:97
HuffmanCode * block_len_trees
Definition: state.h:139
unsigned int uint32_t
Definition: ptypes.h:105
int pos
Definition: state.h:115
Definition: state.h:41
BROTLI_INTERNAL void BrotliStateCleanupAfterMetablock(BrotliState *s)
Definition: state.c:134
BrotliRunningDecodeUint8State
Definition: state.h:85
void * memory_manager_opaque
Definition: state.h:106
int distance_postfix_mask
Definition: state.h:151
BROTLI_INTERNAL void BrotliHuffmanTreeGroupRelease(BrotliState *s, HuffmanTreeGroup *group)
Definition: state.c:173
Definition: state.h:64
BrotliRunningReadBlockLengthState substate_read_block_length
Definition: state.h:209
uint8_t * context_map
Definition: state.h:218
BrotliRunningUncompressedState substate_uncompressed
Definition: state.h:206
int distance_context
Definition: state.h:143
uint32_t code
Definition: state.h:190
BrotliBitReader br
Definition: state.h:102
Definition: state.h:44
Definition: state.h:37
int loop_counter
Definition: state.h:100
HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272]
Definition: state.h:191
Definition: state.h:78
uint32_t buffer_length
Definition: state.h:113
int dist_rb[4]
Definition: state.h:122
uint8_t is_last_metablock
Definition: state.h:211
HuffmanCode table[32]
Definition: state.h:171
Definition: state.h:35
uint8_t size_nibbles
Definition: state.h:214
Definition: state.h:25
int copy_length
Definition: state.h:159
HuffmanCode * block_type_trees
Definition: state.h:138
Definition: state.h:34
uint8_t u8[8]
Definition: state.h:111
HuffmanCode * literal_htree
Definition: state.h:154
uint8_t * context_map_slice
Definition: state.h:130
Definition: state.h:23
uint32_t symbol
Definition: state.h:167
Definition: state.h:31
HuffmanCode * htree_command
Definition: state.h:127
Definition: state.h:96
Definition: state.h:27
BrotliRunningReadBlockLengthState
Definition: state.h:91
BrotliRunningMetablockHeaderState substate_metablock_header
Definition: state.h:203
brotli_free_func free_func
Definition: state.h:105
uint32_t distance_postfix_bits
Definition: state.h:149
Definition: huffman.h:57
uint32_t space
Definition: state.h:169
BrotliRunningHuffmanState
Definition: state.h:76
BROTLI_INTERNAL void BrotliHuffmanTreeGroupInit(BrotliState *s, HuffmanTreeGroup *group, uint32_t alphabet_size, uint32_t ntrees)
Definition: state.c:160
uint32_t block_length_index
Definition: state.h:145
BrotliRunningContextMapState
Definition: state.h:68
brotli_alloc_func alloc_func
Definition: state.h:104
int trivial_literal_context
Definition: state.h:142
int max_backward_distance
Definition: state.h:116
unsigned char uint8_t
Definition: ptypes.h:89
#define BROTLI_HUFFMAN_MAX_CODE_LENGTHS_SIZE
Definition: huffman.h:22
HuffmanTreeGroup literal_hgroup
Definition: state.h:135
Definition: state.h:81
unsigned short uint16_t
Definition: ptypes.h:97
BrotliRunningState
Definition: state.h:21
BROTLI_INTERNAL void BrotliStateMetablockBegin(BrotliState *s)
Definition: state.c:103
Definition: state.h:69
Definition: bit_reader.h:50
Definition: state.h:88
#define BROTLI_HUFFMAN_MAX_SIZE_272
Definition: huffman.h:31
Definition: state.h:59
Definition: state.h:80
uint8_t dist_htree_index
Definition: state.h:155
uint32_t repeat_code_len
Definition: state.h:156
uint32_t mtf_upper_bound
Definition: state.h:194
BrotliRunningTreeGroupState substate_tree_group
Definition: state.h:204
Definition: state.h:60
const uint8_t * custom_dict
Definition: state.h:198
BrotliRunningUncompressedState
Definition: state.h:58
int next_symbol[32]
Definition: state.h:178
uint32_t num_dist_htrees
Definition: state.h:152
Definition: state.h:77
Definition: state.h:86
#define BROTLI_HUFFMAN_MAX_CODE_LENGTH
Definition: huffman.h:19
BrotliRunningDecodeUint8State substate_decode_uint8
Definition: state.h:208
BrotliRunningHuffmanState substate_huffman
Definition: state.h:207
uint8_t * dist_context_map
Definition: state.h:153
BROTLI_INTERNAL void BrotliStateInitWithCustomAllocators(BrotliState *s, brotli_alloc_func alloc_func, brotli_free_func free_func, void *opaque)
Definition: state.c:36
uint8_t is_uncompressed
Definition: state.h:212
BROTLI_INTERNAL void BrotliStateInit(BrotliState *s)
Definition: state.c:32
Definition: state.h:22
Definition: state.h:71
int error_code
Definition: state.h:123
uint32_t window_bits
Definition: state.h:215
Definition: state.h:32
Definition: state.h:79
uint8_t * ringbuffer_end
Definition: state.h:126
int htree_index
Definition: state.h:184
int ringbuffer_mask
Definition: state.h:120
struct A s
int distance_code
Definition: state.h:160
int dist_rb_idx
Definition: state.h:121
uint8_t * dist_context_map_slice
Definition: state.h:131
Definition: state.h:39
uint16_t code_length_histo[16]
Definition: state.h:181
HuffmanCode * next
Definition: state.h:185
int max_backward_distance_minus_custom_dict_size
Definition: state.h:117
int meta_block_remaining_len
Definition: state.h:144
uint32_t num_direct_distance_codes
Definition: state.h:150
uint32_t trivial_literal_contexts[8]
Definition: state.h:221
Definition: state.h:36
uint32_t context_index
Definition: state.h:188
Definition: FetchResponse.idl:29
size_t partial_pos_out
Definition: state.h:164
BrotliRunningTreeGroupState
Definition: state.h:63
uint32_t num_block_types[3]
Definition: state.h:147
BrotliRunningContextMapState substate_context_map
Definition: state.h:205
uint32_t prev_code_len
Definition: state.h:157
size_t rb_roundtrips
Definition: state.h:163
Definition: state.h:87
HuffmanTreeGroup insert_copy_hgroup
Definition: state.h:136
void *(* brotli_alloc_func)(void *opaque, size_t size)
Definition: types.h:32
Definition: state.h:72
int ringbuffer_size
Definition: state.h:119
BROTLI_INTERNAL void BrotliStateCleanup(BrotliState *s)
Definition: state.c:144
uint32_t sub_loop_counter
Definition: state.h:124
union BrotliStateStruct::@713 buffer
uint16_t * symbol_lists
Definition: state.h:173
int custom_dict_size
Definition: state.h:199
uint32_t block_type_rb[6]
Definition: state.h:148
Definition: state.h:33
uint8_t mtf[256+4]
Definition: state.h:195
Definition: state.h:65
uint8_t is_metadata
Definition: state.h:213
uint32_t repeat
Definition: state.h:168
uint32_t max_run_length_prefix
Definition: state.h:189
int max_distance
Definition: state.h:118
uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH+1+BROTLI_HUFFMAN_MAX_CODE_LENGTHS_SIZE]
Definition: state.h:176
uint8_t * ringbuffer
Definition: state.h:125
Definition: huffman.h:35
HuffmanTreeGroup distance_hgroup
Definition: state.h:137
const uint8_t * context_lookup2
Definition: state.h:129
Definition: state.h:43