{ // Set different shape for nodes returning from "compressed metablock". node[shape=invhouse];CMD_INNERCMD_POST_DECODE_LITERALS; CMD_POST_WRAP_COPY;CMD_INNER_WRITE;CMD_POST_WRITE_1; }
// IO ("write") nodes are not in the hot loop! CMD_INNER_WRITE[style=dashed] CMD_INNER->CMD_INNER_WRITE CMD_POST_WRITE_1[style=dashed] CMD_POST_DECODE_LITERALS->CMD_POST_WRITE_1 CMD_POST_WRITE_2[style=dashed] CMD_POST_WRAP_COPY->CMD_POST_WRITE_2
/* BrotliDecoderState addon, used for Compound Dictionary functionality. */ typedefstruct BrotliDecoderCompoundDictionary { int num_chunks; int total_size; int br_index; int br_offset; int br_length; int br_copied; const uint8_t* chunks[16]; int chunk_offsets[16]; int block_bits;
uint8_t block_map[256];
} BrotliDecoderCompoundDictionary;
/* For ReadHuffmanCode. */
brotli_reg_t symbol;
brotli_reg_t repeat;
brotli_reg_t space;
/* Huffman table for "histograms". */
HuffmanCode table[32]; /* List of heads of symbol chains. */
uint16_t* symbol_lists; /* Storage from symbol_lists. */
uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +
BROTLI_NUM_COMMAND_SYMBOLS]; /* Tails of symbol chains. */ int next_symbol[32];
uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES]; /* Population counts for the code lengths. */
uint16_t code_length_histo[16]; /* TODO(eustas): +2 bytes padding */
/* For HuffmanTreeGroupDecode. */ int htree_index;
HuffmanCode* next;
/* Temporary storage for remaining input. Brotli stream format is designed in
a way, that 64 bits are enough to make progress in decoding. */ union {
uint64_t u64;
uint8_t u8[8];
} buffer;
brotli_reg_t buffer_length;
int pos; int max_backward_distance; int max_distance; int ringbuffer_size; int ringbuffer_mask; int dist_rb_idx; int dist_rb[4]; int error_code; int meta_block_remaining_len;
/* This ring buffer holds a few past copy distances that will be used by
some special distance codes. */
HuffmanTreeGroup literal_hgroup;
HuffmanTreeGroup insert_copy_hgroup;
HuffmanTreeGroup distance_hgroup;
HuffmanCode* block_type_trees;
HuffmanCode* block_len_trees; /* This is true if the literal context map histogram type always matches the
block type. It is then not needed to keep the context (faster decoding). */ int trivial_literal_context; /* Distance context is actual after command is decoded and before distance is
computed. After distance computation it is used as a temporary variable. */ int distance_context;
brotli_reg_t block_length[3];
brotli_reg_t block_length_index;
brotli_reg_t num_block_types[3];
brotli_reg_t block_type_rb[6];
brotli_reg_t distance_postfix_bits;
brotli_reg_t num_direct_distance_codes;
brotli_reg_t num_dist_htrees;
uint8_t* dist_context_map;
HuffmanCode* literal_htree;
/* For partial write operations. */
size_t rb_roundtrips; /* how many times we went around the ring-buffer */
size_t partial_pos_out; /* how much output to the user in total */
/* For InverseMoveToFrontTransform. */
brotli_reg_t mtf_upper_bound;
uint32_t mtf[64 + 1];
/* Literal/Command/Distance block size maximum; same as maximum metablock size;
used as block size when there is no block switching. */ #define BROTLI_BLOCK_SIZE_CAP (1U << 24)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.