]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/C/BrotliCompress/enc/backward_references.c
BaseTools: Update Brotli Compress to the latest one 1.0.6
[mirror_edk2.git] / BaseTools / Source / C / BrotliCompress / enc / backward_references.c
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 /* Function to find backward reference copies. */
8
9 #include "./backward_references.h"
10
11 #include "../common/constants.h"
12 #include "../common/dictionary.h"
13 #include "../common/platform.h"
14 #include <brotli/types.h>
15 #include "./command.h"
16 #include "./dictionary_hash.h"
17 #include "./memory.h"
18 #include "./quality.h"
19
20 #if defined(__cplusplus) || defined(c_plusplus)
21 extern "C" {
22 #endif
23
24 static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
25 size_t max_distance,
26 const int* dist_cache) {
27 if (distance <= max_distance) {
28 size_t distance_plus_3 = distance + 3;
29 size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
30 size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
31 if (distance == (size_t)dist_cache[0]) {
32 return 0;
33 } else if (distance == (size_t)dist_cache[1]) {
34 return 1;
35 } else if (offset0 < 7) {
36 return (0x9750468 >> (4 * offset0)) & 0xF;
37 } else if (offset1 < 7) {
38 return (0xFDB1ACE >> (4 * offset1)) & 0xF;
39 } else if (distance == (size_t)dist_cache[2]) {
40 return 2;
41 } else if (distance == (size_t)dist_cache[3]) {
42 return 3;
43 }
44 }
45 return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
46 }
47
48 #define EXPAND_CAT(a, b) CAT(a, b)
49 #define CAT(a, b) a ## b
50 #define FN(X) EXPAND_CAT(X, HASHER())
51 #define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
52
53 #define PREFIX() N
54
55 #define HASHER() H2
56 /* NOLINTNEXTLINE(build/include) */
57 #include "./backward_references_inc.h"
58 #undef HASHER
59
60 #define HASHER() H3
61 /* NOLINTNEXTLINE(build/include) */
62 #include "./backward_references_inc.h"
63 #undef HASHER
64
65 #define HASHER() H4
66 /* NOLINTNEXTLINE(build/include) */
67 #include "./backward_references_inc.h"
68 #undef HASHER
69
70 #define HASHER() H5
71 /* NOLINTNEXTLINE(build/include) */
72 #include "./backward_references_inc.h"
73 #undef HASHER
74
75 #define HASHER() H6
76 /* NOLINTNEXTLINE(build/include) */
77 #include "./backward_references_inc.h"
78 #undef HASHER
79
80 #define HASHER() H40
81 /* NOLINTNEXTLINE(build/include) */
82 #include "./backward_references_inc.h"
83 #undef HASHER
84
85 #define HASHER() H41
86 /* NOLINTNEXTLINE(build/include) */
87 #include "./backward_references_inc.h"
88 #undef HASHER
89
90 #define HASHER() H42
91 /* NOLINTNEXTLINE(build/include) */
92 #include "./backward_references_inc.h"
93 #undef HASHER
94
95 #define HASHER() H54
96 /* NOLINTNEXTLINE(build/include) */
97 #include "./backward_references_inc.h"
98 #undef HASHER
99
100 #define HASHER() H35
101 /* NOLINTNEXTLINE(build/include) */
102 #include "./backward_references_inc.h"
103 #undef HASHER
104
105 #define HASHER() H55
106 /* NOLINTNEXTLINE(build/include) */
107 #include "./backward_references_inc.h"
108 #undef HASHER
109
110 #define HASHER() H65
111 /* NOLINTNEXTLINE(build/include) */
112 #include "./backward_references_inc.h"
113 #undef HASHER
114
115 #undef PREFIX
116
117 #undef EXPORT_FN
118 #undef FN
119 #undef CAT
120 #undef EXPAND_CAT
121
122 void BrotliCreateBackwardReferences(
123 size_t num_bytes, size_t position, const uint8_t* ringbuffer,
124 size_t ringbuffer_mask, const BrotliEncoderParams* params,
125 HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
126 Command* commands, size_t* num_commands, size_t* num_literals) {
127 switch (params->hasher.type) {
128 #define CASE_(N) \
129 case N: \
130 CreateBackwardReferencesNH ## N( \
131 num_bytes, position, ringbuffer, \
132 ringbuffer_mask, params, hasher, dist_cache, \
133 last_insert_len, commands, num_commands, num_literals); \
134 return;
135 FOR_GENERIC_HASHERS(CASE_)
136 #undef CASE_
137 default:
138 break;
139 }
140 }
141
142 #if defined(__cplusplus) || defined(c_plusplus)
143 } /* extern "C" */
144 #endif