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/* (Transparent) Shared Dictionary definition. */
8
9#ifndef BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_
10#define BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_
11
12#include <brotli/shared_dictionary.h>
13#include <brotli/types.h>
14
15#include "dictionary.h"
16#include "transform.h"
17
18#if defined(__cplusplus) || defined(c_plusplus)
19extern "C" {
20#endif
21
22struct BrotliSharedDictionaryStruct {
23 /* LZ77 prefixes (compound dictionary). */
24 uint32_t num_prefix; /* max SHARED_BROTLI_MAX_COMPOUND_DICTS */
25 size_t prefix_size[SHARED_BROTLI_MAX_COMPOUND_DICTS];
26 const uint8_t* prefix[SHARED_BROTLI_MAX_COMPOUND_DICTS];
27
28 /* If set, the context map is used to select word and transform list from 64
29 contexts, if not set, the context map is not used and only words[0] and
30 transforms[0] are to be used. */
31 BROTLI_BOOL context_based;
32
33 uint8_t context_map[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];
34
35 /* Amount of word_list+transform_list combinations. */
36 uint8_t num_dictionaries;
37
38 /* Must use num_dictionaries values. */
39 const BrotliDictionary* words[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];
40
41 /* Must use num_dictionaries values. */
42 const BrotliTransforms* transforms[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];
43
44 /* Amount of custom word lists. May be 0 if only Brotli's built-in is used */
45 uint8_t num_word_lists;
46
47 /* Contents of the custom words lists. Must be NULL if num_word_lists is 0. */
48 BrotliDictionary* words_instances;
49
50 /* Amount of custom transform lists. May be 0 if only Brotli's built-in is
51 used */
52 uint8_t num_transform_lists;
53
54 /* Contents of the custom transform lists. Must be NULL if num_transform_lists
55 is 0. */
56 BrotliTransforms* transforms_instances;
57
58 /* Concatenated prefix_suffix_maps of the custom transform lists. Must be NULL
59 if num_transform_lists is 0. */
60 uint16_t* prefix_suffix_maps;
61
62 /* Memory management */
63 brotli_alloc_func alloc_func;
64 brotli_free_func free_func;
65 void* memory_manager_opaque;
66};
67
68typedef struct BrotliSharedDictionaryStruct BrotliSharedDictionaryInternal;
69#define BrotliSharedDictionary BrotliSharedDictionaryInternal
70
71#if defined(__cplusplus) || defined(c_plusplus)
72} /* extern "C" */
73#endif
74
75#endif /* BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_ */
76