Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
Loading...
Searching...
No Matches
encoder_dict.h
Go to the documentation of this file.
1/* Copyright 2017 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#ifndef BROTLI_ENC_ENCODER_DICT_H_
8#define BROTLI_ENC_ENCODER_DICT_H_
9
10#include <brotli/shared_dictionary.h>
11#include <brotli/types.h>
12
14#include "../common/platform.h"
15#include "compound_dictionary.h"
16#include "memory.h"
17#include "static_dict_lut.h"
18
19#if defined(__cplusplus) || defined(c_plusplus)
20extern "C" {
21#endif
22
23/*
24Dictionary hierarchy for Encoder:
25-SharedEncoderDictionary
26--CompoundDictionary
27---PreparedDictionary [up to 15x]
28 = prefix dictionary with precomputed hashes
29--ContextualEncoderDictionary
30---BrotliEncoderDictionary [up to 64x]
31 = for each context, precomputed static dictionary with words + transforms
32
33Dictionary hiearchy from common: similar, but without precomputed hashes
34-BrotliSharedDictionary
35--BrotliDictionary [up to 64x]
36--BrotliTransforms [up to 64x]
37--const uint8_t* prefix [up to 15x]: compound dictionaries
38*/
39
40typedef struct BrotliTrieNode {
41 uint8_t single; /* if 1, sub is a single node for c instead of 256 */
42 uint8_t c;
43 uint8_t len_; /* untransformed length */
44 uint32_t idx_; /* word index + num words * transform index */
45 uint32_t sub; /* index of sub node(s) in the pool */
47
48typedef struct BrotliTrie {
50 size_t pool_capacity;
51 size_t pool_size;
54
55#if defined(BROTLI_EXPERIMENTAL)
56BROTLI_INTERNAL const BrotliTrieNode* BrotliTrieSub(const BrotliTrie* trie,
57 const BrotliTrieNode* node, uint8_t c);
58#endif /* BROTLI_EXPERIMENTAL */
59
60/* Dictionary data (words and transforms) for 1 possible context */
61typedef struct BrotliEncoderDictionary {
63 uint32_t num_transforms;
64
65 /* cut off for fast encoder */
66 uint32_t cutoffTransformsCount;
67 uint64_t cutoffTransforms;
68
69 /* from dictionary_hash.h, for fast encoder */
70 const uint16_t* hash_table_words;
71 const uint8_t* hash_table_lengths;
72
73 /* from static_dict_lut.h, for slow encoder */
74 const uint16_t* buckets;
75 const DictWord* dict_words;
76 /* Heavy version, for use by slow encoder when there are custom transforms.
77 Contains every possible transformed dictionary word in a trie. It encodes
78 about as fast as the non-heavy encoder but consumes a lot of memory and
79 takes time to build. */
82
83 /* Reference to other dictionaries. */
85
86 /* Allocated memory, used only when not using the Brotli defaults */
87 uint16_t* hash_table_data_words_;
90 uint16_t* buckets_data_;
95
96/* Dictionary data for all 64 contexts */
97typedef struct ContextualEncoderDictionary {
99 uint8_t num_dictionaries;
102
103 /* If num_instances_ is 1, instance_ is used, else dynamic allocation with
104 instances_ is used. */
105 size_t num_instances_;
109
110typedef struct SharedEncoderDictionary {
111 /* Magic value to distinguish this struct from PreparedDictionary for
112 certain external usages. */
113 uint32_t magic;
114
115 /* LZ77 prefix, compound dictionary */
117
118 /* Custom static dictionary (optionally context-based) */
120
121 /* The maximum quality the dictionary was computed for */
122 int max_quality;
124
125typedef struct ManagedDictionary {
126 uint32_t magic;
128 uint32_t* dictionary;
130
131/* Initializes to the brotli built-in dictionary */
134
135#if defined(BROTLI_EXPERIMENTAL)
136/* Initializes to shared dictionary that will be parsed from
137 encoded_dict. Requires that you keep the encoded_dict buffer
138 around, parts of data will point to it. */
139BROTLI_INTERNAL BROTLI_BOOL BrotliInitCustomSharedEncoderDictionary(
140 MemoryManager* m, const uint8_t* encoded_dict, size_t size,
141 int quality, SharedEncoderDictionary* dict);
142#endif /* BROTLI_EXPERIMENTAL */
143
146
148 brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
149
152
153#if defined(__cplusplus) || defined(c_plusplus)
154} /* extern "C" */
155#endif
156
157#endif /* BROTLI_ENC_ENCODER_DICT_H_ */
struct BrotliEncoderDictionary BrotliEncoderDictionary
BROTLI_INTERNAL void BrotliDestroyManagedDictionary(ManagedDictionary *dictionary)
Definition encoder_dict.c:625
BROTLI_INTERNAL void BrotliInitSharedEncoderDictionary(SharedEncoderDictionary *dict)
Definition encoder_dict.c:487
BROTLI_INTERNAL void BrotliCleanupSharedEncoderDictionary(MemoryManager *m, SharedEncoderDictionary *dict)
Definition encoder_dict.c:594
struct ContextualEncoderDictionary ContextualEncoderDictionary
struct BrotliTrie BrotliTrie
struct BrotliTrieNode BrotliTrieNode
struct ManagedDictionary ManagedDictionary
struct SharedEncoderDictionary SharedEncoderDictionary
BROTLI_INTERNAL ManagedDictionary * BrotliCreateManagedDictionary(brotli_alloc_func alloc_func, brotli_free_func free_func, void *opaque)
Definition encoder_dict.c:611
#define SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS
Definition shared_dictionary.h:21
Definition dictionary.h:19
Definition encoder_dict.h:20
uint64_t cutoffTransforms
Definition encoder_dict.h:26
uint8_t * hash_table_data_lengths_
Definition encoder_dict.h:88
uint32_t cutoffTransformsCount
Definition encoder_dict.h:25
BrotliTrie trie
Definition encoder_dict.h:80
const DictWord * dict_words
Definition encoder_dict.h:34
const BrotliDictionary * words
Definition encoder_dict.h:21
const struct ContextualEncoderDictionary * parent
Definition encoder_dict.h:84
uint16_t * hash_table_data_words_
Definition encoder_dict.h:87
BROTLI_BOOL has_words_heavy
Definition encoder_dict.h:81
uint32_t num_transforms
Definition encoder_dict.h:22
BrotliDictionary * words_instance_
Definition encoder_dict.h:93
size_t dict_words_alloc_size_
Definition encoder_dict.h:91
uint16_t * buckets_data_
Definition encoder_dict.h:90
const uint16_t * buckets
Definition encoder_dict.h:33
const uint16_t * hash_table_words
Definition encoder_dict.h:29
size_t buckets_alloc_size_
Definition encoder_dict.h:89
DictWord * dict_words_data_
Definition encoder_dict.h:92
const uint8_t * hash_table_lengths
Definition encoder_dict.h:30
Definition encoder_dict.h:48
size_t pool_capacity
Definition encoder_dict.h:50
BrotliTrieNode root
Definition encoder_dict.h:52
size_t pool_size
Definition encoder_dict.h:51
BrotliTrieNode * pool
Definition encoder_dict.h:49
Definition encoder_dict.h:40
uint8_t c
Definition encoder_dict.h:42
uint32_t idx_
Definition encoder_dict.h:44
uint8_t len_
Definition encoder_dict.h:43
uint32_t sub
Definition encoder_dict.h:45
uint8_t single
Definition encoder_dict.h:41
Definition compound_dictionary.h:57
Definition encoder_dict.h:97
BrotliEncoderDictionary instance_
Definition encoder_dict.h:106
const BrotliEncoderDictionary * dict[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS]
Definition encoder_dict.h:101
BrotliEncoderDictionary * instances_
Definition encoder_dict.h:107
uint8_t num_dictionaries
Definition encoder_dict.h:99
uint8_t context_map[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS]
Definition encoder_dict.h:100
size_t num_instances_
Definition encoder_dict.h:105
BROTLI_BOOL context_based
Definition encoder_dict.h:98
Definition static_dict_lut.h:18
Definition encoder_dict.h:125
uint32_t magic
Definition encoder_dict.h:126
uint32_t * dictionary
Definition encoder_dict.h:128
MemoryManager memory_manager_
Definition encoder_dict.h:127
Definition memory.h:26
Definition encoder_dict.h:110
ContextualEncoderDictionary contextual
Definition encoder_dict.h:119
uint32_t magic
Definition encoder_dict.h:113
CompoundDictionary compound
Definition encoder_dict.h:116
int max_quality
Definition encoder_dict.h:122
Definition zstd_decompress.c:306
#define BROTLI_INTERNAL
Definition platform.h:173
size_t size
Definition platform.h:559
void *(* brotli_alloc_func)(void *opaque, size_t size)
Definition types.h:71
void(* brotli_free_func)(void *opaque, void *address)
Definition types.h:81
#define BROTLI_BOOL
Definition types.h:49
#define c(i)
Definition sha256.c:43
const void * dict
Definition zbuff.h:76