brotli 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/ext/brotli/brotli.cc +114 -24
  3. data/ext/brotli/brotli.h +0 -1
  4. data/ext/brotli/extconf.rb +30 -23
  5. data/lib/brotli/version.rb +1 -1
  6. data/vendor/brotli/LICENSE +1 -1
  7. data/vendor/brotli/dec/Makefile +1 -1
  8. data/vendor/brotli/dec/bit_reader.c +3 -3
  9. data/vendor/brotli/dec/bit_reader.h +25 -27
  10. data/vendor/brotli/dec/context.h +4 -4
  11. data/vendor/brotli/dec/decode.c +410 -486
  12. data/vendor/brotli/dec/decode.h +101 -105
  13. data/vendor/brotli/dec/dictionary.c +1 -1
  14. data/vendor/brotli/dec/dictionary.h +7 -8
  15. data/vendor/brotli/dec/huffman.c +103 -105
  16. data/vendor/brotli/dec/huffman.h +18 -18
  17. data/vendor/brotli/dec/port.h +52 -40
  18. data/vendor/brotli/dec/prefix.h +2 -0
  19. data/vendor/brotli/dec/state.c +13 -19
  20. data/vendor/brotli/dec/state.h +25 -39
  21. data/vendor/brotli/dec/transform.h +38 -44
  22. data/vendor/brotli/dec/types.h +2 -2
  23. data/vendor/brotli/enc/Makefile +1 -1
  24. data/vendor/brotli/enc/backward_references.cc +455 -359
  25. data/vendor/brotli/enc/backward_references.h +79 -3
  26. data/vendor/brotli/enc/bit_cost.h +54 -32
  27. data/vendor/brotli/enc/block_splitter.cc +285 -193
  28. data/vendor/brotli/enc/block_splitter.h +4 -12
  29. data/vendor/brotli/enc/brotli_bit_stream.cc +623 -324
  30. data/vendor/brotli/enc/brotli_bit_stream.h +76 -37
  31. data/vendor/brotli/enc/cluster.h +161 -120
  32. data/vendor/brotli/enc/command.h +60 -37
  33. data/vendor/brotli/enc/compress_fragment.cc +701 -0
  34. data/vendor/brotli/enc/compress_fragment.h +47 -0
  35. data/vendor/brotli/enc/compress_fragment_two_pass.cc +524 -0
  36. data/vendor/brotli/enc/compress_fragment_two_pass.h +40 -0
  37. data/vendor/brotli/enc/compressor.h +15 -0
  38. data/vendor/brotli/enc/context.h +1 -1
  39. data/vendor/brotli/enc/dictionary.h +2 -2
  40. data/vendor/brotli/enc/encode.cc +819 -286
  41. data/vendor/brotli/enc/encode.h +38 -15
  42. data/vendor/brotli/enc/encode_parallel.cc +40 -42
  43. data/vendor/brotli/enc/entropy_encode.cc +144 -147
  44. data/vendor/brotli/enc/entropy_encode.h +32 -8
  45. data/vendor/brotli/enc/entropy_encode_static.h +572 -0
  46. data/vendor/brotli/enc/fast_log.h +7 -40
  47. data/vendor/brotli/enc/find_match_length.h +9 -9
  48. data/vendor/brotli/enc/hash.h +462 -154
  49. data/vendor/brotli/enc/histogram.cc +6 -6
  50. data/vendor/brotli/enc/histogram.h +13 -13
  51. data/vendor/brotli/enc/literal_cost.cc +45 -45
  52. data/vendor/brotli/enc/metablock.cc +92 -89
  53. data/vendor/brotli/enc/metablock.h +12 -12
  54. data/vendor/brotli/enc/port.h +7 -16
  55. data/vendor/brotli/enc/prefix.h +23 -22
  56. data/vendor/brotli/enc/ringbuffer.h +75 -29
  57. data/vendor/brotli/enc/static_dict.cc +56 -48
  58. data/vendor/brotli/enc/static_dict.h +5 -5
  59. data/vendor/brotli/enc/streams.cc +1 -1
  60. data/vendor/brotli/enc/streams.h +5 -5
  61. data/vendor/brotli/enc/transform.h +40 -35
  62. data/vendor/brotli/enc/types.h +2 -0
  63. data/vendor/brotli/enc/utf8_util.cc +3 -2
  64. data/vendor/brotli/enc/write_bits.h +6 -6
  65. metadata +9 -5
  66. data/vendor/brotli/dec/streams.c +0 -102
  67. data/vendor/brotli/dec/streams.h +0 -95
@@ -18,13 +18,16 @@
18
18
  read and overlapping memcpy; this reduces decompression speed by 5%
19
19
  * BROTLI_DEBUG dumps file name and line number when decoder detects stream
20
20
  or memory error
21
- * BROTLI_DECODE_DEBUG enables asserts and dumps various state information
21
+ * BROTLI_ENABLE_LOG enables asserts and dumps various state information
22
22
  */
23
23
 
24
24
  #ifndef BROTLI_DEC_PORT_H_
25
25
  #define BROTLI_DEC_PORT_H_
26
26
 
27
- #include<assert.h>
27
+ #if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
28
+ #include <assert.h>
29
+ #include <stdio.h>
30
+ #endif
28
31
 
29
32
  /* Compatibility with non-clang compilers. */
30
33
  #ifndef __has_builtin
@@ -39,10 +42,6 @@
39
42
  #define __has_feature(x) 0
40
43
  #endif
41
44
 
42
- #if defined(__sparc)
43
- #define BROTLI_TARGET_SPARC
44
- #endif
45
-
46
45
  #if defined(__arm__) || defined(__thumb__) || \
47
46
  defined(_M_ARM) || defined(_M_ARMT)
48
47
  #define BROTLI_TARGET_ARM
@@ -55,6 +54,10 @@
55
54
  #endif /* ARMv8 */
56
55
  #endif /* ARM */
57
56
 
57
+ #if defined(__i386) || defined(_M_IX86)
58
+ #define BROTLI_TARGET_X86
59
+ #endif
60
+
58
61
  #if defined(__x86_64__) || defined(_M_X64)
59
62
  #define BROTLI_TARGET_X64
60
63
  #endif
@@ -83,25 +86,16 @@
83
86
  #define BROTLI_MODERN_COMPILER 0
84
87
  #endif
85
88
 
86
- /* SPARC and ARMv6 don't support unaligned read.
87
- Choose portable build for them. */
88
- #if !defined(BROTLI_BUILD_PORTABLE)
89
- #if defined(BROTLI_TARGET_SPARC) || \
90
- (defined(BROTLI_TARGET_ARM) && !defined(BROTLI_TARGET_ARMV7))
91
- #define BROTLI_BUILD_PORTABLE
92
- #endif /* SPARK or ARMv6 */
93
- #endif /* portable build */
94
-
95
89
  #ifdef BROTLI_BUILD_PORTABLE
96
- #define BROTLI_ALIGNED_READ 1
97
- #define BROTLI_SAFE_MEMMOVE 1
90
+ #define BROTLI_ALIGNED_READ (!!1)
91
+ #elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
92
+ defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8)
93
+ /* Allow unaligned read only for whitelisted CPUs. */
94
+ #define BROTLI_ALIGNED_READ (!!0)
98
95
  #else
99
- #define BROTLI_ALIGNED_READ 0
100
- #define BROTLI_SAFE_MEMMOVE 0
96
+ #define BROTLI_ALIGNED_READ (!!1)
101
97
  #endif
102
98
 
103
- #define BROTLI_ASAN_BUILD __has_feature(address_sanitizer)
104
-
105
99
  /* Define "PREDICT_TRUE" and "PREDICT_FALSE" macros for capable compilers.
106
100
 
107
101
  To apply compiler hint, enclose the branching condition into macros, like this:
@@ -129,9 +123,9 @@ OR:
129
123
 
130
124
  /* IS_CONSTANT macros returns true for compile-time constant expressions. */
131
125
  #if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_constant_p)
132
- #define IS_CONSTANT(x) __builtin_constant_p(x)
126
+ #define IS_CONSTANT(x) (!!__builtin_constant_p(x))
133
127
  #else
134
- #define IS_CONSTANT(x) 0
128
+ #define IS_CONSTANT(x) (!!0)
135
129
  #endif
136
130
 
137
131
  #if BROTLI_MODERN_COMPILER || __has_attribute(always_inline)
@@ -140,9 +134,21 @@ OR:
140
134
  #define ATTRIBUTE_ALWAYS_INLINE
141
135
  #endif
142
136
 
137
+ #if defined(_WIN32) || defined(__CYGWIN__)
138
+ #define ATTRIBUTE_VISIBILITY_HIDDEN
139
+ #elif BROTLI_MODERN_COMPILER || __has_attribute(visibility)
140
+ #define ATTRIBUTE_VISIBILITY_HIDDEN __attribute__ ((visibility ("hidden")))
141
+ #else
142
+ #define ATTRIBUTE_VISIBILITY_HIDDEN
143
+ #endif
144
+
145
+ #ifndef BROTLI_INTERNAL
146
+ #define BROTLI_INTERNAL ATTRIBUTE_VISIBILITY_HIDDEN
147
+ #endif
148
+
143
149
  #ifndef _MSC_VER
144
- #if defined(__cplusplus) || !defined(__STRICT_ANSI__) \
145
- || __STDC_VERSION__ >= 199901L
150
+ #if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \
151
+ __STDC_VERSION__ >= 199901L
146
152
  #define BROTLI_INLINE inline ATTRIBUTE_ALWAYS_INLINE
147
153
  #else
148
154
  #define BROTLI_INLINE
@@ -151,10 +157,22 @@ OR:
151
157
  #define BROTLI_INLINE __forceinline
152
158
  #endif /* _MSC_VER */
153
159
 
154
- #ifdef BROTLI_DECODE_DEBUG
160
+ #ifdef BROTLI_ENABLE_LOG
155
161
  #define BROTLI_DCHECK(x) assert(x)
162
+ #define BROTLI_LOG(x) printf x
156
163
  #else
157
164
  #define BROTLI_DCHECK(x)
165
+ #define BROTLI_LOG(x)
166
+ #endif
167
+
168
+ #if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
169
+ static inline void BrotliDump(const char* f, int l, const char* fn) {
170
+ fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
171
+ fflush(stderr);
172
+ }
173
+ #define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
174
+ #else
175
+ #define BROTLI_DUMP() (void)(0)
158
176
  #endif
159
177
 
160
178
  #if defined(BROTLI_BUILD_64_BIT)
@@ -194,20 +212,14 @@ OR:
194
212
  #endif
195
213
 
196
214
  #if BROTLI_MODERN_COMPILER || __has_attribute(noinline)
197
- #define BROTLI_NOINLINE __attribute__ ((noinline))
215
+ #define BROTLI_NOINLINE __attribute__((noinline))
198
216
  #else
199
217
  #define BROTLI_NOINLINE
200
218
  #endif
201
219
 
202
- #if BROTLI_ASAN_BUILD && !defined(BROTLI_BUILD_PORTABLE)
203
- #define BROTLI_NO_ASAN __attribute__((no_sanitize("address"))) BROTLI_NOINLINE
204
- #else
205
- #define BROTLI_NO_ASAN
206
- #endif
207
-
208
- #define BROTLI_REPEAT(N, X) { \
209
- if ((N & 1) != 0) {X;} \
210
- if ((N & 2) != 0) {X; X;} \
220
+ #define BROTLI_REPEAT(N, X) { \
221
+ if ((N & 1) != 0) {X;} \
222
+ if ((N & 2) != 0) {X; X;} \
211
223
  if ((N & 4) != 0) {X; X; X; X;} \
212
224
  }
213
225
 
@@ -223,16 +235,16 @@ static BROTLI_INLINE unsigned BrotliRBit(unsigned input) {
223
235
  #endif /* gcc || clang */
224
236
 
225
237
  #if defined(BROTLI_TARGET_ARM)
226
- #define BROTLI_HAS_UBFX 1
238
+ #define BROTLI_HAS_UBFX (!!1)
227
239
  #else
228
- #define BROTLI_HAS_UBFX 0
240
+ #define BROTLI_HAS_UBFX (!!0)
229
241
  #endif
230
242
 
231
243
  #define BROTLI_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L)
232
244
 
233
- #define BROTLI_FREE(S, X) { \
245
+ #define BROTLI_FREE(S, X) { \
234
246
  S->free_func(S->memory_manager_opaque, X); \
235
- X = NULL; \
247
+ X = NULL; \
236
248
  }
237
249
 
238
250
  #define BROTLI_UNUSED(X) (void)(X)
@@ -11,6 +11,8 @@
11
11
  #ifndef BROTLI_DEC_PREFIX_H_
12
12
  #define BROTLI_DEC_PREFIX_H_
13
13
 
14
+ #include "./types.h"
15
+
14
16
  /* Represents the range of values belonging to a prefix code: */
15
17
  /* [offset, offset + 2^nbits) */
16
18
  struct PrefixCodeRange {
@@ -4,16 +4,21 @@
4
4
  See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5
5
  */
6
6
 
7
- #include "./huffman.h"
8
7
  #include "./state.h"
9
8
 
10
- #include <stdlib.h>
11
- #include <string.h>
9
+ #include <stdlib.h> /* free, malloc */
10
+
11
+ #include "./huffman.h"
12
+ #include "./types.h"
12
13
 
13
14
  #if defined(__cplusplus) || defined(c_plusplus)
14
15
  extern "C" {
15
16
  #endif
16
17
 
18
+ /* Declared in decode.h */
19
+ int BrotliStateIsStreamStart(const BrotliState* s);
20
+ int BrotliStateIsStreamEnd(const BrotliState* s);
21
+
17
22
  static void* DefaultAllocFunc(void* opaque, size_t size) {
18
23
  BROTLI_UNUSED(opaque);
19
24
  return malloc(size);
@@ -75,7 +80,6 @@ void BrotliStateInitWithCustomAllocators(BrotliState* s,
75
80
  s->distance_hgroup.codes = NULL;
76
81
  s->distance_hgroup.htrees = NULL;
77
82
 
78
-
79
83
  s->custom_dict = NULL;
80
84
  s->custom_dict_size = 0;
81
85
 
@@ -94,13 +98,6 @@ void BrotliStateInitWithCustomAllocators(BrotliState* s,
94
98
  s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
95
99
 
96
100
  s->mtf_upper_bound = 255;
97
-
98
- s->legacy_input_buffer = 0;
99
- s->legacy_output_buffer = 0;
100
- s->legacy_input_len = 0;
101
- s->legacy_output_len = 0;
102
- s->legacy_input_pos = 0;
103
- s->legacy_output_pos = 0;
104
101
  }
105
102
 
106
103
  void BrotliStateMetablockBegin(BrotliState* s) {
@@ -121,7 +118,6 @@ void BrotliStateMetablockBegin(BrotliState* s) {
121
118
  s->context_modes = NULL;
122
119
  s->dist_context_map = NULL;
123
120
  s->context_map_slice = NULL;
124
- s->literal_htree_index = 0;
125
121
  s->literal_htree = NULL;
126
122
  s->dist_context_map_slice = NULL;
127
123
  s->dist_htree_index = 0;
@@ -150,8 +146,6 @@ void BrotliStateCleanup(BrotliState* s) {
150
146
 
151
147
  BROTLI_FREE(s, s->ringbuffer);
152
148
  BROTLI_FREE(s, s->block_type_trees);
153
- BROTLI_FREE(s, s->legacy_input_buffer);
154
- BROTLI_FREE(s, s->legacy_output_buffer);
155
149
  }
156
150
 
157
151
  int BrotliStateIsStreamStart(const BrotliState* s) {
@@ -166,10 +160,10 @@ int BrotliStateIsStreamEnd(const BrotliState* s) {
166
160
  void BrotliHuffmanTreeGroupInit(BrotliState* s, HuffmanTreeGroup* group,
167
161
  uint32_t alphabet_size, uint32_t ntrees) {
168
162
  /* Pack two allocations into one */
169
- const size_t code_size =
170
- sizeof(HuffmanCode) * (size_t)(ntrees * BROTLI_HUFFMAN_MAX_TABLE_SIZE);
171
- const size_t htree_size = sizeof(HuffmanCode*) * (size_t)ntrees;
172
- char *p = (char*)BROTLI_ALLOC(s, code_size + htree_size);
163
+ const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5];
164
+ const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;
165
+ const size_t htree_size = sizeof(HuffmanCode*) * ntrees;
166
+ char* p = (char*)BROTLI_ALLOC(s, code_size + htree_size);
173
167
  group->alphabet_size = (uint16_t)alphabet_size;
174
168
  group->num_htrees = (uint16_t)ntrees;
175
169
  group->codes = (HuffmanCode*)p;
@@ -182,5 +176,5 @@ void BrotliHuffmanTreeGroupRelease(BrotliState* s, HuffmanTreeGroup* group) {
182
176
  }
183
177
 
184
178
  #if defined(__cplusplus) || defined(c_plusplus)
185
- } /* extern "C" */
179
+ } /* extern "C" */
186
180
  #endif
@@ -9,10 +9,10 @@
9
9
  #ifndef BROTLI_DEC_STATE_H_
10
10
  #define BROTLI_DEC_STATE_H_
11
11
 
12
- #include <stdio.h>
13
12
  #include "./bit_reader.h"
14
13
  #include "./huffman.h"
15
14
  #include "./types.h"
15
+ #include "./port.h"
16
16
 
17
17
  #if defined(__cplusplus) || defined(c_plusplus)
18
18
  extern "C" {
@@ -95,6 +95,10 @@ typedef enum {
95
95
 
96
96
  struct BrotliStateStruct {
97
97
  BrotliRunningState state;
98
+
99
+ /* This counter is reused for several disjoint loops. */
100
+ int loop_counter;
101
+
98
102
  BrotliBitReader br;
99
103
 
100
104
  brotli_alloc_func alloc_func;
@@ -108,8 +112,6 @@ struct BrotliStateStruct {
108
112
  } buffer;
109
113
  uint32_t buffer_length;
110
114
 
111
- /* This counter is reused for several disjoint loops. */
112
- int loop_counter;
113
115
  int pos;
114
116
  int max_backward_distance;
115
117
  int max_backward_distance_minus_custom_dict_size;
@@ -118,6 +120,8 @@ struct BrotliStateStruct {
118
120
  int ringbuffer_mask;
119
121
  int dist_rb_idx;
120
122
  int dist_rb[4];
123
+ int error_code;
124
+ uint32_t sub_loop_counter;
121
125
  uint8_t* ringbuffer;
122
126
  uint8_t* ringbuffer_end;
123
127
  HuffmanCode* htree_command;
@@ -126,8 +130,6 @@ struct BrotliStateStruct {
126
130
  uint8_t* context_map_slice;
127
131
  uint8_t* dist_context_map_slice;
128
132
 
129
- uint32_t sub_loop_counter;
130
-
131
133
  /* This ring buffer holds a few past copy distances that will be used by */
132
134
  /* some special distance codes. */
133
135
  HuffmanTreeGroup literal_hgroup;
@@ -149,13 +151,11 @@ struct BrotliStateStruct {
149
151
  int distance_postfix_mask;
150
152
  uint32_t num_dist_htrees;
151
153
  uint8_t* dist_context_map;
152
- HuffmanCode *literal_htree;
153
- uint8_t literal_htree_index;
154
+ HuffmanCode* literal_htree;
154
155
  uint8_t dist_htree_index;
155
156
  uint32_t repeat_code_len;
156
157
  uint32_t prev_code_len;
157
158
 
158
-
159
159
  int copy_length;
160
160
  int distance_code;
161
161
 
@@ -173,7 +173,7 @@ struct BrotliStateStruct {
173
173
  uint16_t* symbol_lists;
174
174
  /* Storage from symbol_lists. */
175
175
  uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +
176
- BROTLI_HUFFMAN_MAX_CODE_LENGTHS_SIZE];
176
+ BROTLI_HUFFMAN_MAX_CODE_LENGTHS_SIZE];
177
177
  /* Tails of symbol chains. */
178
178
  int next_symbol[32];
179
179
  uint8_t code_length_code_lengths[18];
@@ -188,11 +188,11 @@ struct BrotliStateStruct {
188
188
  uint32_t context_index;
189
189
  uint32_t max_run_length_prefix;
190
190
  uint32_t code;
191
- HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_TABLE_SIZE];
191
+ HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];
192
192
 
193
193
  /* For InverseMoveToFrontTransform */
194
194
  uint32_t mtf_upper_bound;
195
- uint8_t mtf[256];
195
+ uint8_t mtf[256 + 4];
196
196
 
197
197
  /* For custom dictionaries */
198
198
  const uint8_t* custom_dict;
@@ -218,39 +218,25 @@ struct BrotliStateStruct {
218
218
  uint8_t* context_map;
219
219
  uint8_t* context_modes;
220
220
 
221
- uint8_t* legacy_input_buffer;
222
- uint8_t* legacy_output_buffer;
223
- size_t legacy_input_len;
224
- size_t legacy_output_len;
225
- size_t legacy_input_pos;
226
- size_t legacy_output_pos;
221
+ uint32_t trivial_literal_contexts[8]; /* 256 bits */
227
222
  };
228
223
 
229
- typedef struct BrotliStateStruct BrotliState;
230
-
231
- void BrotliStateInit(BrotliState* s);
232
- void BrotliStateInitWithCustomAllocators(BrotliState* s,
233
- brotli_alloc_func alloc_func,
234
- brotli_free_func free_func,
235
- void* opaque);
236
- void BrotliStateCleanup(BrotliState* s);
237
- void BrotliStateMetablockBegin(BrotliState* s);
238
- void BrotliStateCleanupAfterMetablock(BrotliState* s);
239
- void BrotliHuffmanTreeGroupInit(BrotliState* s, HuffmanTreeGroup* group,
240
- uint32_t alphabet_size, uint32_t ntrees);
241
- void BrotliHuffmanTreeGroupRelease(BrotliState* s, HuffmanTreeGroup* group);
242
-
243
- /* Returns 1, if s is in a state where we have not read any input bytes yet,
244
- and 0 otherwise */
245
- int BrotliStateIsStreamStart(const BrotliState* s);
246
-
247
- /* Returns 1, if s is in a state where we reached the end of the input and
248
- produced all of the output, and 0 otherwise. */
249
- int BrotliStateIsStreamEnd(const BrotliState* s);
224
+ typedef struct BrotliStateStruct BrotliStateInternal;
225
+ #define BrotliState BrotliStateInternal
250
226
 
227
+ BROTLI_INTERNAL void BrotliStateInit(BrotliState* s);
228
+ BROTLI_INTERNAL void BrotliStateInitWithCustomAllocators(BrotliState* s,
229
+ brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
230
+ BROTLI_INTERNAL void BrotliStateCleanup(BrotliState* s);
231
+ BROTLI_INTERNAL void BrotliStateMetablockBegin(BrotliState* s);
232
+ BROTLI_INTERNAL void BrotliStateCleanupAfterMetablock(BrotliState* s);
233
+ BROTLI_INTERNAL void BrotliHuffmanTreeGroupInit(BrotliState* s,
234
+ HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t ntrees);
235
+ BROTLI_INTERNAL void BrotliHuffmanTreeGroupRelease(BrotliState* s,
236
+ HuffmanTreeGroup* group);
251
237
 
252
238
  #if defined(__cplusplus) || defined(c_plusplus)
253
- } /* extern "C" */
239
+ } /* extern "C" */
254
240
  #endif
255
241
 
256
242
  #endif /* BROTLI_DEC_STATE_H_ */
@@ -9,8 +9,6 @@
9
9
  #ifndef BROTLI_DEC_TRANSFORM_H_
10
10
  #define BROTLI_DEC_TRANSFORM_H_
11
11
 
12
- #include <stdio.h>
13
- #include <ctype.h>
14
12
  #include "./port.h"
15
13
  #include "./types.h"
16
14
 
@@ -19,27 +17,27 @@ extern "C" {
19
17
  #endif
20
18
 
21
19
  enum WordTransformType {
22
- kIdentity = 0,
23
- kOmitLast1 = 1,
24
- kOmitLast2 = 2,
25
- kOmitLast3 = 3,
26
- kOmitLast4 = 4,
27
- kOmitLast5 = 5,
28
- kOmitLast6 = 6,
29
- kOmitLast7 = 7,
30
- kOmitLast8 = 8,
31
- kOmitLast9 = 9,
20
+ kIdentity = 0,
21
+ kOmitLast1 = 1,
22
+ kOmitLast2 = 2,
23
+ kOmitLast3 = 3,
24
+ kOmitLast4 = 4,
25
+ kOmitLast5 = 5,
26
+ kOmitLast6 = 6,
27
+ kOmitLast7 = 7,
28
+ kOmitLast8 = 8,
29
+ kOmitLast9 = 9,
32
30
  kUppercaseFirst = 10,
33
- kUppercaseAll = 11,
34
- kOmitFirst1 = 12,
35
- kOmitFirst2 = 13,
36
- kOmitFirst3 = 14,
37
- kOmitFirst4 = 15,
38
- kOmitFirst5 = 16,
39
- kOmitFirst6 = 17,
40
- kOmitFirst7 = 18,
41
- kOmitFirst8 = 19,
42
- kOmitFirst9 = 20
31
+ kUppercaseAll = 11,
32
+ kOmitFirst1 = 12,
33
+ kOmitFirst2 = 13,
34
+ kOmitFirst3 = 14,
35
+ kOmitFirst4 = 15,
36
+ kOmitFirst5 = 16,
37
+ kOmitFirst6 = 17,
38
+ kOmitFirst7 = 18,
39
+ kOmitFirst8 = 19,
40
+ kOmitFirst9 = 20
43
41
  };
44
42
 
45
43
  typedef struct {
@@ -68,15 +66,15 @@ enum {
68
66
  kPFix_SP = 1,
69
67
  kPFix_COMMASP = 3,
70
68
  kPFix_SPofSPtheSP = 6,
71
- kPFix_SPtheSP = 9,
69
+ kPFix_SPtheSP = 9,
72
70
  kPFix_eSP = 12,
73
- kPFix_SPofSP = 15,
71
+ kPFix_SPofSP = 15,
74
72
  kPFix_sSP = 20,
75
73
  kPFix_DOT = 23,
76
74
  kPFix_SPandSP = 25,
77
75
  kPFix_SPinSP = 31,
78
76
  kPFix_DQUOT = 36,
79
- kPFix_SPtoSP = 38,
77
+ kPFix_SPtoSP = 38,
80
78
  kPFix_DQUOTGT = 43,
81
79
  kPFix_NEWLINE = 46,
82
80
  kPFix_DOTSP = 48,
@@ -86,20 +84,20 @@ enum {
86
84
  kPFix_SPthatSP = 63,
87
85
  kPFix_SQUOT = 70,
88
86
  kPFix_SPwithSP = 72,
89
- kPFix_SPfromSP = 79,
90
- kPFix_SPbySP = 86,
87
+ kPFix_SPfromSP = 79,
88
+ kPFix_SPbySP = 86,
91
89
  kPFix_OPEN = 91,
92
90
  kPFix_DOTSPTheSP = 93,
93
- kPFix_SPonSP = 100,
94
- kPFix_SPasSP = 105,
95
- kPFix_SPisSP = 110,
91
+ kPFix_SPonSP = 100,
92
+ kPFix_SPasSP = 105,
93
+ kPFix_SPisSP = 110,
96
94
  kPFix_ingSP = 115,
97
95
  kPFix_NEWLINETAB = 120,
98
96
  kPFix_COLON = 123,
99
97
  kPFix_edSP = 125,
100
98
  kPFix_EQDQUOT = 129,
101
99
  kPFix_SPatSP = 132,
102
- kPFix_lySP = 137,
100
+ kPFix_lySP = 137,
103
101
  kPFix_COMMA = 141,
104
102
  kPFix_EQSQUOT = 143,
105
103
  kPFix_DOTcomSLASH = 146,
@@ -116,7 +114,6 @@ enum {
116
114
  kPFix_ousSP = 203
117
115
  };
118
116
 
119
-
120
117
  static const Transform kTransforms[] = {
121
118
  { kPFix_EMPTY, kIdentity, kPFix_EMPTY },
122
119
  { kPFix_EMPTY, kIdentity, kPFix_SP },
@@ -243,7 +240,7 @@ static const Transform kTransforms[] = {
243
240
 
244
241
  static const int kNumTransforms = sizeof(kTransforms) / sizeof(kTransforms[0]);
245
242
 
246
- static int ToUpperCase(uint8_t *p) {
243
+ static int ToUpperCase(uint8_t* p) {
247
244
  if (p[0] < 0xc0) {
248
245
  if (p[0] >= 'a' && p[0] <= 'z') {
249
246
  p[0] ^= 32;
@@ -269,22 +266,19 @@ static BROTLI_NOINLINE int TransformDictionaryWord(
269
266
  }
270
267
  {
271
268
  const int t = kTransforms[transform].transform;
272
- int skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);
273
269
  int i = 0;
274
- uint8_t* uppercase;
275
- if (skip > len) {
276
- skip = len;
277
- }
278
- word += skip;
279
- len -= skip;
280
- if (t <= kOmitLast9) {
270
+ int skip = t - (kOmitFirst1 - 1);
271
+ if (skip > 0) {
272
+ word += skip;
273
+ len -= skip;
274
+ } else if (t <= kOmitLast9) {
281
275
  len -= t;
282
276
  }
283
277
  while (i < len) { dst[idx++] = word[i++]; }
284
- uppercase = &dst[idx - len];
285
278
  if (t == kUppercaseFirst) {
286
- ToUpperCase(uppercase);
279
+ ToUpperCase(&dst[idx - len]);
287
280
  } else if (t == kUppercaseAll) {
281
+ uint8_t* uppercase = &dst[idx - len];
288
282
  while (len > 0) {
289
283
  int step = ToUpperCase(uppercase);
290
284
  uppercase += step;
@@ -300,7 +294,7 @@ static BROTLI_NOINLINE int TransformDictionaryWord(
300
294
  }
301
295
 
302
296
  #if defined(__cplusplus) || defined(c_plusplus)
303
- } /* extern "C" */
297
+ } /* extern "C" */
304
298
  #endif
305
299
 
306
300
  #endif /* BROTLI_DEC_TRANSFORM_H_ */
@@ -29,10 +29,10 @@ typedef __int64 int64_t;
29
29
  size length. Neither items nor size are allowed to be 0.
30
30
  opaque argument is a pointer provided by client and could be used to bind
31
31
  function to specific object (memory pool). */
32
- typedef void* (*brotli_alloc_func) (void* opaque, size_t size);
32
+ typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
33
33
 
34
34
  /* Deallocating function pointer. Function SHOULD be no-op in the case the
35
35
  address is 0. */
36
- typedef void (*brotli_free_func) (void* opaque, void* address);
36
+ typedef void (*brotli_free_func)(void* opaque, void* address);
37
37
 
38
38
  #endif /* BROTLI_DEC_TYPES_H_ */
@@ -2,7 +2,7 @@
2
2
 
3
3
  include ../shared.mk
4
4
 
5
- OBJS_NODICT = backward_references.o block_splitter.o brotli_bit_stream.o encode.o encode_parallel.o entropy_encode.o histogram.o literal_cost.o metablock.o static_dict.o streams.o utf8_util.o
5
+ OBJS_NODICT = backward_references.o block_splitter.o brotli_bit_stream.o compress_fragment.o compress_fragment_two_pass.o encode.o encode_parallel.o entropy_encode.o histogram.o literal_cost.o metablock.o static_dict.o streams.o utf8_util.o
6
6
  OBJS = $(OBJS_NODICT) dictionary.o
7
7
 
8
8
  nodict : $(OBJS_NODICT)