xref: /aosp_15_r20/external/cronet/third_party/brotli/common/dictionary.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker /* Copyright 2013 Google Inc. All Rights Reserved.
2*6777b538SAndroid Build Coastguard Worker 
3*6777b538SAndroid Build Coastguard Worker    Distributed under MIT license.
4*6777b538SAndroid Build Coastguard Worker    See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5*6777b538SAndroid Build Coastguard Worker */
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker /* Collection of static dictionary words. */
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #ifndef BROTLI_COMMON_DICTIONARY_H_
10*6777b538SAndroid Build Coastguard Worker #define BROTLI_COMMON_DICTIONARY_H_
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include <brotli/port.h>
13*6777b538SAndroid Build Coastguard Worker #include <brotli/types.h>
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker #if defined(__cplusplus) || defined(c_plusplus)
16*6777b538SAndroid Build Coastguard Worker extern "C" {
17*6777b538SAndroid Build Coastguard Worker #endif
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker typedef struct BrotliDictionary {
20*6777b538SAndroid Build Coastguard Worker   /**
21*6777b538SAndroid Build Coastguard Worker    * Number of bits to encode index of dictionary word in a bucket.
22*6777b538SAndroid Build Coastguard Worker    *
23*6777b538SAndroid Build Coastguard Worker    * Specification: Appendix A. Static Dictionary Data
24*6777b538SAndroid Build Coastguard Worker    *
25*6777b538SAndroid Build Coastguard Worker    * Words in a dictionary are bucketed by length.
26*6777b538SAndroid Build Coastguard Worker    * @c 0 means that there are no words of a given length.
27*6777b538SAndroid Build Coastguard Worker    * Dictionary consists of words with length of [4..24] bytes.
28*6777b538SAndroid Build Coastguard Worker    * Values at [0..3] and [25..31] indices should not be addressed.
29*6777b538SAndroid Build Coastguard Worker    */
30*6777b538SAndroid Build Coastguard Worker   uint8_t size_bits_by_length[32];
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
33*6777b538SAndroid Build Coastguard Worker   uint32_t offsets_by_length[32];
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker   /* assert(data_size == offsets_by_length[31]) */
36*6777b538SAndroid Build Coastguard Worker   size_t data_size;
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker   /* Data array is not bound, and should obey to size_bits_by_length values.
39*6777b538SAndroid Build Coastguard Worker      Specified size matches default (RFC 7932) dictionary. Its size is
40*6777b538SAndroid Build Coastguard Worker      defined by data_size */
41*6777b538SAndroid Build Coastguard Worker   const uint8_t* data;
42*6777b538SAndroid Build Coastguard Worker } BrotliDictionary;
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker /**
47*6777b538SAndroid Build Coastguard Worker  * Sets dictionary data.
48*6777b538SAndroid Build Coastguard Worker  *
49*6777b538SAndroid Build Coastguard Worker  * When dictionary data is already set / present, this method is no-op.
50*6777b538SAndroid Build Coastguard Worker  *
51*6777b538SAndroid Build Coastguard Worker  * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
52*6777b538SAndroid Build Coastguard Worker  * This method is used ONLY in multi-client environment (e.g. C + Java),
53*6777b538SAndroid Build Coastguard Worker  * to reduce storage by sharing single dictionary between implementations.
54*6777b538SAndroid Build Coastguard Worker  */
55*6777b538SAndroid Build Coastguard Worker BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker #define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
58*6777b538SAndroid Build Coastguard Worker #define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker #if defined(__cplusplus) || defined(c_plusplus)
61*6777b538SAndroid Build Coastguard Worker }  /* extern "C" */
62*6777b538SAndroid Build Coastguard Worker #endif
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker #endif  /* BROTLI_COMMON_DICTIONARY_H_ */
65