1 /* Copyright 2013 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 /* Collection of static dictionary words. */ 8 9 #ifndef BROTLI_COMMON_DICTIONARY_H_ 10 #define BROTLI_COMMON_DICTIONARY_H_ 11 12 #include <brotli/port.h> 13 #include <brotli/types.h> 14 15 #if defined(__cplusplus) || defined(c_plusplus) 16 extern "C" { 17 #endif 18 19 typedef struct BrotliDictionary { 20 /** 21 * Number of bits to encode index of dictionary word in a bucket. 22 * 23 * Specification: Appendix A. Static Dictionary Data 24 * 25 * Words in a dictionary are bucketed by length. 26 * @c 0 means that there are no words of a given length. 27 * Dictionary consists of words with length of [4..24] bytes. 28 * Values at [0..3] and [25..31] indices should not be addressed. 29 */ 30 uint8_t size_bits_by_length[32]; 31 32 /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */ 33 uint32_t offsets_by_length[32]; 34 35 /* Data array is not bound, and should obey to size_bits_by_length values. 36 Specified size matches default (RFC 7932) dictionary. */ 37 /* assert(sizeof(data) == offsets_by_length[31]) */ 38 uint8_t data[122784]; 39 } BrotliDictionary; 40 41 BROTLI_COMMON_API extern const BrotliDictionary* BrotliGetDictionary(void); 42 43 #define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4 44 #define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24 45 46 #if defined(__cplusplus) || defined(c_plusplus) 47 } /* extern "C" */ 48 #endif 49 50 #endif /* BROTLI_COMMON_DICTIONARY_H_ */ 51