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) 19 extern "C" { 20 #endif 21 22 struct 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 68 typedef 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