brotli 0.4.0 → 0.6.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +6 -3
- data/.github/workflows/publish.yml +7 -17
- data/.gitmodules +1 -1
- data/README.md +2 -2
- data/ext/brotli/brotli.c +8 -0
- data/ext/brotli/extconf.rb +6 -0
- data/lib/brotli/version.rb +1 -1
- data/test/brotli_test.rb +14 -1
- data/test/test_helper.rb +1 -0
- data/vendor/brotli/c/common/constants.c +1 -1
- data/vendor/brotli/c/common/constants.h +2 -1
- data/vendor/brotli/c/common/context.c +1 -1
- data/vendor/brotli/c/common/dictionary.c +5 -3
- data/vendor/brotli/c/common/platform.c +2 -1
- data/vendor/brotli/c/common/platform.h +60 -113
- data/vendor/brotli/c/common/shared_dictionary.c +521 -0
- data/vendor/brotli/c/common/shared_dictionary_internal.h +75 -0
- data/vendor/brotli/c/common/transform.c +1 -1
- data/vendor/brotli/c/common/version.h +31 -6
- data/vendor/brotli/c/dec/bit_reader.c +10 -8
- data/vendor/brotli/c/dec/bit_reader.h +172 -100
- data/vendor/brotli/c/dec/decode.c +467 -200
- data/vendor/brotli/c/dec/huffman.c +7 -4
- data/vendor/brotli/c/dec/huffman.h +2 -1
- data/vendor/brotli/c/dec/prefix.h +2 -1
- data/vendor/brotli/c/dec/state.c +33 -9
- data/vendor/brotli/c/dec/state.h +70 -35
- data/vendor/brotli/c/enc/backward_references.c +81 -19
- data/vendor/brotli/c/enc/backward_references.h +5 -4
- data/vendor/brotli/c/enc/backward_references_hq.c +148 -52
- data/vendor/brotli/c/enc/backward_references_hq.h +6 -5
- data/vendor/brotli/c/enc/backward_references_inc.h +31 -5
- data/vendor/brotli/c/enc/bit_cost.c +8 -7
- data/vendor/brotli/c/enc/bit_cost.h +5 -4
- data/vendor/brotli/c/enc/block_splitter.c +37 -14
- data/vendor/brotli/c/enc/block_splitter.h +5 -4
- data/vendor/brotli/c/enc/block_splitter_inc.h +86 -45
- data/vendor/brotli/c/enc/brotli_bit_stream.c +132 -110
- data/vendor/brotli/c/enc/brotli_bit_stream.h +11 -6
- data/vendor/brotli/c/enc/cluster.c +10 -9
- data/vendor/brotli/c/enc/cluster.h +7 -6
- data/vendor/brotli/c/enc/cluster_inc.h +25 -20
- data/vendor/brotli/c/enc/command.c +1 -1
- data/vendor/brotli/c/enc/command.h +5 -4
- data/vendor/brotli/c/enc/compound_dictionary.c +207 -0
- data/vendor/brotli/c/enc/compound_dictionary.h +74 -0
- data/vendor/brotli/c/enc/compress_fragment.c +93 -83
- data/vendor/brotli/c/enc/compress_fragment.h +32 -7
- data/vendor/brotli/c/enc/compress_fragment_two_pass.c +99 -87
- data/vendor/brotli/c/enc/compress_fragment_two_pass.h +21 -3
- data/vendor/brotli/c/enc/dictionary_hash.c +3 -1
- data/vendor/brotli/c/enc/encode.c +473 -404
- data/vendor/brotli/c/enc/encoder_dict.c +611 -4
- data/vendor/brotli/c/enc/encoder_dict.h +117 -3
- data/vendor/brotli/c/enc/entropy_encode.c +3 -2
- data/vendor/brotli/c/enc/entropy_encode.h +2 -1
- data/vendor/brotli/c/enc/entropy_encode_static.h +5 -2
- data/vendor/brotli/c/enc/fast_log.c +1 -1
- data/vendor/brotli/c/enc/fast_log.h +2 -1
- data/vendor/brotli/c/enc/find_match_length.h +15 -22
- data/vendor/brotli/c/enc/hash.h +285 -45
- data/vendor/brotli/c/enc/hash_composite_inc.h +26 -11
- data/vendor/brotli/c/enc/hash_forgetful_chain_inc.h +20 -18
- data/vendor/brotli/c/enc/hash_longest_match64_inc.h +34 -39
- data/vendor/brotli/c/enc/hash_longest_match_inc.h +6 -10
- data/vendor/brotli/c/enc/hash_longest_match_quickly_inc.h +4 -4
- data/vendor/brotli/c/enc/hash_rolling_inc.h +4 -4
- data/vendor/brotli/c/enc/hash_to_binary_tree_inc.h +6 -5
- data/vendor/brotli/c/enc/histogram.c +4 -4
- data/vendor/brotli/c/enc/histogram.h +7 -6
- data/vendor/brotli/c/enc/literal_cost.c +20 -15
- data/vendor/brotli/c/enc/literal_cost.h +4 -2
- data/vendor/brotli/c/enc/memory.c +29 -5
- data/vendor/brotli/c/enc/memory.h +19 -2
- data/vendor/brotli/c/enc/metablock.c +72 -58
- data/vendor/brotli/c/enc/metablock.h +9 -8
- data/vendor/brotli/c/enc/metablock_inc.h +8 -6
- data/vendor/brotli/c/enc/params.h +4 -3
- data/vendor/brotli/c/enc/prefix.h +3 -2
- data/vendor/brotli/c/enc/quality.h +40 -3
- data/vendor/brotli/c/enc/ringbuffer.h +4 -3
- data/vendor/brotli/c/enc/state.h +104 -0
- data/vendor/brotli/c/enc/static_dict.c +60 -4
- data/vendor/brotli/c/enc/static_dict.h +3 -2
- data/vendor/brotli/c/enc/static_dict_lut.h +2 -0
- data/vendor/brotli/c/enc/utf8_util.c +1 -1
- data/vendor/brotli/c/enc/utf8_util.h +2 -1
- data/vendor/brotli/c/enc/write_bits.h +2 -1
- data/vendor/brotli/c/include/brotli/decode.h +67 -2
- data/vendor/brotli/c/include/brotli/encode.h +55 -2
- data/vendor/brotli/c/include/brotli/port.h +28 -11
- data/vendor/brotli/c/include/brotli/shared_dictionary.h +100 -0
- metadata +9 -3
@@ -4,13 +4,13 @@
|
|
4
4
|
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
|
5
5
|
*/
|
6
6
|
|
7
|
-
#include "
|
7
|
+
#include "static_dict.h"
|
8
8
|
|
9
9
|
#include "../common/dictionary.h"
|
10
10
|
#include "../common/platform.h"
|
11
11
|
#include "../common/transform.h"
|
12
|
-
#include "
|
13
|
-
#include "
|
12
|
+
#include "encoder_dict.h"
|
13
|
+
#include "find_match_length.h"
|
14
14
|
|
15
15
|
#if defined(__cplusplus) || defined(c_plusplus)
|
16
16
|
extern "C" {
|
@@ -74,10 +74,27 @@ static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,
|
|
74
74
|
}
|
75
75
|
}
|
76
76
|
|
77
|
-
|
77
|
+
/* Finds matches for a single static dictionary */
|
78
|
+
static BROTLI_BOOL BrotliFindAllStaticDictionaryMatchesFor(
|
78
79
|
const BrotliEncoderDictionary* dictionary, const uint8_t* data,
|
79
80
|
size_t min_length, size_t max_length, uint32_t* matches) {
|
80
81
|
BROTLI_BOOL has_found_match = BROTLI_FALSE;
|
82
|
+
#if defined(BROTLI_EXPERIMENTAL)
|
83
|
+
if (dictionary->has_words_heavy) {
|
84
|
+
const BrotliTrieNode* node = &dictionary->trie.root;
|
85
|
+
size_t l = 0;
|
86
|
+
while (node && l < max_length) {
|
87
|
+
uint8_t c;
|
88
|
+
if (l >= min_length && node->len_) {
|
89
|
+
AddMatch(node->idx_, l, node->len_, matches);
|
90
|
+
has_found_match = BROTLI_TRUE;
|
91
|
+
}
|
92
|
+
c = data[l++];
|
93
|
+
node = BrotliTrieSub(&dictionary->trie, node, c);
|
94
|
+
}
|
95
|
+
return has_found_match;
|
96
|
+
}
|
97
|
+
#endif /* BROTLI_EXPERIMENTAL */
|
81
98
|
{
|
82
99
|
size_t offset = dictionary->buckets[Hash(data)];
|
83
100
|
BROTLI_BOOL end = !offset;
|
@@ -481,6 +498,45 @@ BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
|
|
481
498
|
return has_found_match;
|
482
499
|
}
|
483
500
|
|
501
|
+
/* Finds matches for one or more dictionaries, if multiple are present
|
502
|
+
in the contextual dictionary */
|
503
|
+
BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
|
504
|
+
const BrotliEncoderDictionary* dictionary, const uint8_t* data,
|
505
|
+
size_t min_length, size_t max_length, uint32_t* matches) {
|
506
|
+
BROTLI_BOOL has_found_match =
|
507
|
+
BrotliFindAllStaticDictionaryMatchesFor(
|
508
|
+
dictionary, data, min_length, max_length, matches);
|
509
|
+
|
510
|
+
if (!!dictionary->parent && dictionary->parent->num_dictionaries > 1) {
|
511
|
+
uint32_t matches2[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];
|
512
|
+
int l;
|
513
|
+
const BrotliEncoderDictionary* dictionary2 = dictionary->parent->dict[0];
|
514
|
+
if (dictionary2 == dictionary) {
|
515
|
+
dictionary2 = dictionary->parent->dict[1];
|
516
|
+
}
|
517
|
+
|
518
|
+
for (l = 0; l < BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1; l++) {
|
519
|
+
matches2[l] = kInvalidMatch;
|
520
|
+
}
|
521
|
+
|
522
|
+
has_found_match |= BrotliFindAllStaticDictionaryMatchesFor(
|
523
|
+
dictionary2, data, min_length, max_length, matches2);
|
524
|
+
|
525
|
+
for (l = 0; l < BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1; l++) {
|
526
|
+
if (matches2[l] != kInvalidMatch) {
|
527
|
+
uint32_t dist = (uint32_t)(matches2[l] >> 5);
|
528
|
+
uint32_t len_code = matches2[l] & 31;
|
529
|
+
uint32_t skipdist = (uint32_t)((uint32_t)(1 << dictionary->words->
|
530
|
+
size_bits_by_length[len_code]) & ~1u) *
|
531
|
+
(uint32_t)dictionary->num_transforms;
|
532
|
+
/* TODO(lode): check for dist overflow */
|
533
|
+
dist += skipdist;
|
534
|
+
AddMatch(dist, (size_t)l, len_code, matches);
|
535
|
+
}
|
536
|
+
}
|
537
|
+
}
|
538
|
+
return has_found_match;
|
539
|
+
}
|
484
540
|
#if defined(__cplusplus) || defined(c_plusplus)
|
485
541
|
} /* extern "C" */
|
486
542
|
#endif
|
@@ -9,10 +9,11 @@
|
|
9
9
|
#ifndef BROTLI_ENC_STATIC_DICT_H_
|
10
10
|
#define BROTLI_ENC_STATIC_DICT_H_
|
11
11
|
|
12
|
+
#include <brotli/types.h>
|
13
|
+
|
12
14
|
#include "../common/dictionary.h"
|
13
15
|
#include "../common/platform.h"
|
14
|
-
#include
|
15
|
-
#include "./encoder_dict.h"
|
16
|
+
#include "encoder_dict.h"
|
16
17
|
|
17
18
|
#if defined(__cplusplus) || defined(c_plusplus)
|
18
19
|
extern "C" {
|
@@ -22,6 +22,7 @@ typedef struct DictWord {
|
|
22
22
|
uint16_t idx;
|
23
23
|
} DictWord;
|
24
24
|
|
25
|
+
/* GENERATED CODE START */
|
25
26
|
static const int kDictNumBits = 15;
|
26
27
|
static const uint32_t kDictHashMul32 = 0x1E35A7BD;
|
27
28
|
|
@@ -5856,6 +5857,7 @@ static const DictWord kStaticDictionaryWords[31705] = {
|
|
5856
5857
|
,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142,
|
5857
5858
|
11,410},{9,11,660},{138,11,347}
|
5858
5859
|
};
|
5860
|
+
/* GENERATED CODE END */
|
5859
5861
|
|
5860
5862
|
#if defined(__cplusplus) || defined(c_plusplus)
|
5861
5863
|
} /* extern "C" */
|
@@ -9,9 +9,10 @@
|
|
9
9
|
#ifndef BROTLI_ENC_WRITE_BITS_H_
|
10
10
|
#define BROTLI_ENC_WRITE_BITS_H_
|
11
11
|
|
12
|
-
#include "../common/platform.h"
|
13
12
|
#include <brotli/types.h>
|
14
13
|
|
14
|
+
#include "../common/platform.h"
|
15
|
+
|
15
16
|
#if defined(__cplusplus) || defined(c_plusplus)
|
16
17
|
extern "C" {
|
17
18
|
#endif
|
@@ -13,6 +13,7 @@
|
|
13
13
|
#define BROTLI_DEC_DECODE_H_
|
14
14
|
|
15
15
|
#include <brotli/port.h>
|
16
|
+
#include <brotli/shared_dictionary.h>
|
16
17
|
#include <brotli/types.h>
|
17
18
|
|
18
19
|
#if defined(__cplusplus) || defined(c_plusplus)
|
@@ -85,8 +86,9 @@ typedef enum {
|
|
85
86
|
BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \
|
86
87
|
BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \
|
87
88
|
\
|
88
|
-
/* -17
|
89
|
+
/* -17 code is reserved */ \
|
89
90
|
\
|
91
|
+
BROTLI_ERROR_CODE(_ERROR_, COMPOUND_DICTIONARY, -18) SEPARATOR \
|
90
92
|
BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \
|
91
93
|
BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \
|
92
94
|
\
|
@@ -154,6 +156,28 @@ typedef enum BrotliDecoderParameter {
|
|
154
156
|
BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
|
155
157
|
BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);
|
156
158
|
|
159
|
+
/**
|
160
|
+
* Adds LZ77 prefix dictionary, adds or replaces built-in static dictionary and
|
161
|
+
* transforms.
|
162
|
+
*
|
163
|
+
* Attached dictionary ownership is not transferred.
|
164
|
+
* Data provided to this method should be kept accessible until
|
165
|
+
* decoding is finished and decoder instance is destroyed.
|
166
|
+
*
|
167
|
+
* @note Dictionaries can NOT be attached after actual decoding is started.
|
168
|
+
*
|
169
|
+
* @param state decoder instance
|
170
|
+
* @param type dictionary data format
|
171
|
+
* @param data_size length of memory region pointed by @p data
|
172
|
+
* @param data dictionary data in format corresponding to @p type
|
173
|
+
* @returns ::BROTLI_FALSE if dictionary is corrupted,
|
174
|
+
* or dictionary count limit is reached
|
175
|
+
* @returns ::BROTLI_TRUE if dictionary is accepted / attached
|
176
|
+
*/
|
177
|
+
BROTLI_DEC_API BROTLI_BOOL BrotliDecoderAttachDictionary(
|
178
|
+
BrotliDecoderState* state, BrotliSharedDictionaryType type,
|
179
|
+
size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);
|
180
|
+
|
157
181
|
/**
|
158
182
|
* Creates an instance of ::BrotliDecoderState and initializes it.
|
159
183
|
*
|
@@ -333,10 +357,51 @@ BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);
|
|
333
357
|
/**
|
334
358
|
* Gets a decoder library version.
|
335
359
|
*
|
336
|
-
* Look at
|
360
|
+
* Look at BROTLI_MAKE_HEX_VERSION for more information.
|
337
361
|
*/
|
338
362
|
BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
|
339
363
|
|
364
|
+
/**
|
365
|
+
* Callback to fire on metadata block start.
|
366
|
+
*
|
367
|
+
* After this callback is fired, if @p size is not @c 0, it is followed by
|
368
|
+
* ::brotli_decoder_metadata_chunk_func as more metadata block contents become
|
369
|
+
* accessible.
|
370
|
+
*
|
371
|
+
* @param opaque callback handle
|
372
|
+
* @param size size of metadata block
|
373
|
+
*/
|
374
|
+
typedef void (*brotli_decoder_metadata_start_func)(void* opaque, size_t size);
|
375
|
+
|
376
|
+
/**
|
377
|
+
* Callback to fire on metadata block chunk becomes available.
|
378
|
+
*
|
379
|
+
* This function can be invoked multiple times per metadata block; block should
|
380
|
+
* be considered finished when sum of @p size matches the announced metadata
|
381
|
+
* block size. Chunks contents pointed by @p data are transient and shouln not
|
382
|
+
* be accessed after leaving the callback.
|
383
|
+
*
|
384
|
+
* @param opaque callback handle
|
385
|
+
* @param data pointer to metadata contents
|
386
|
+
* @param size size of metadata block chunk, at least @c 1
|
387
|
+
*/
|
388
|
+
typedef void (*brotli_decoder_metadata_chunk_func)(void* opaque,
|
389
|
+
const uint8_t* data,
|
390
|
+
size_t size);
|
391
|
+
|
392
|
+
/**
|
393
|
+
* Sets callback for receiving metadata blocks.
|
394
|
+
*
|
395
|
+
* @param state decoder instance
|
396
|
+
* @param start_func callback on metadata block start
|
397
|
+
* @param chunk_func callback on metadata block chunk
|
398
|
+
* @param opaque callback handle
|
399
|
+
*/
|
400
|
+
BROTLI_DEC_API void BrotliDecoderSetMetadataCallbacks(
|
401
|
+
BrotliDecoderState* state,
|
402
|
+
brotli_decoder_metadata_start_func start_func,
|
403
|
+
brotli_decoder_metadata_chunk_func chunk_func, void* opaque);
|
404
|
+
|
340
405
|
#if defined(__cplusplus) || defined(c_plusplus)
|
341
406
|
} /* extern "C" */
|
342
407
|
#endif
|
@@ -13,6 +13,7 @@
|
|
13
13
|
#define BROTLI_ENC_ENCODE_H_
|
14
14
|
|
15
15
|
#include <brotli/port.h>
|
16
|
+
#include <brotli/shared_dictionary.h>
|
16
17
|
#include <brotli/types.h>
|
17
18
|
|
18
19
|
#if defined(__cplusplus) || defined(c_plusplus)
|
@@ -269,6 +270,51 @@ BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(
|
|
269
270
|
*/
|
270
271
|
BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);
|
271
272
|
|
273
|
+
/* Opaque type for pointer to different possible internal structures containing
|
274
|
+
dictionary prepared for the encoder */
|
275
|
+
typedef struct BrotliEncoderPreparedDictionaryStruct
|
276
|
+
BrotliEncoderPreparedDictionary;
|
277
|
+
|
278
|
+
/**
|
279
|
+
* Prepares a shared dictionary from the given file format for the encoder.
|
280
|
+
*
|
281
|
+
* @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
|
282
|
+
* case they are both zero, default memory allocators are used. @p opaque is
|
283
|
+
* passed to @p alloc_func and @p free_func when they are called. @p free_func
|
284
|
+
* has to return without doing anything when asked to free a NULL pointer.
|
285
|
+
*
|
286
|
+
* @param type type of dictionary stored in data
|
287
|
+
* @param data_size size of @p data buffer
|
288
|
+
* @param data pointer to the dictionary data
|
289
|
+
* @param quality the maximum Brotli quality to prepare the dictionary for,
|
290
|
+
* use BROTLI_MAX_QUALITY by default
|
291
|
+
* @param alloc_func custom memory allocation function
|
292
|
+
* @param free_func custom memory free function
|
293
|
+
* @param opaque custom memory manager handle
|
294
|
+
*/
|
295
|
+
BROTLI_ENC_API BrotliEncoderPreparedDictionary*
|
296
|
+
BrotliEncoderPrepareDictionary(BrotliSharedDictionaryType type,
|
297
|
+
size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)],
|
298
|
+
int quality,
|
299
|
+
brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
|
300
|
+
|
301
|
+
BROTLI_ENC_API void BrotliEncoderDestroyPreparedDictionary(
|
302
|
+
BrotliEncoderPreparedDictionary* dictionary);
|
303
|
+
|
304
|
+
/**
|
305
|
+
* Attaches a prepared dictionary of any type to the encoder. Can be used
|
306
|
+
* multiple times to attach multiple dictionaries. The dictionary type was
|
307
|
+
* determined by BrotliEncoderPrepareDictionary. Multiple raw prefix
|
308
|
+
* dictionaries and/or max 1 serialized dictionary with custom words can be
|
309
|
+
* attached.
|
310
|
+
*
|
311
|
+
* @returns ::BROTLI_FALSE in case of error
|
312
|
+
* @returns ::BROTLI_TRUE otherwise
|
313
|
+
*/
|
314
|
+
BROTLI_ENC_API BROTLI_BOOL BrotliEncoderAttachPreparedDictionary(
|
315
|
+
BrotliEncoderState* state,
|
316
|
+
const BrotliEncoderPreparedDictionary* dictionary);
|
317
|
+
|
272
318
|
/**
|
273
319
|
* Calculates the output size bound for the given @p input_size.
|
274
320
|
*
|
@@ -407,7 +453,7 @@ BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
|
|
407
453
|
*
|
408
454
|
* This method is used to make language bindings easier and more efficient:
|
409
455
|
* -# push data to ::BrotliEncoderCompressStream,
|
410
|
-
* until ::BrotliEncoderHasMoreOutput returns
|
456
|
+
* until ::BrotliEncoderHasMoreOutput returns BROTLI_TRUE
|
411
457
|
* -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific
|
412
458
|
* entity
|
413
459
|
*
|
@@ -433,11 +479,18 @@ BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
|
|
433
479
|
BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(
|
434
480
|
BrotliEncoderState* state, size_t* size);
|
435
481
|
|
482
|
+
/* Returns the estimated peak memory usage (in bytes) of the BrotliCompress()
|
483
|
+
function, not counting the memory needed for the input and output. */
|
484
|
+
BROTLI_ENC_EXTRA_API size_t BrotliEncoderEstimatePeakMemoryUsage(
|
485
|
+
int quality, int lgwin, size_t input_size);
|
486
|
+
/* Returns 0 if dictionary is not valid; otherwise returns allocation size. */
|
487
|
+
BROTLI_ENC_EXTRA_API size_t BrotliEncoderGetPreparedDictionarySize(
|
488
|
+
const BrotliEncoderPreparedDictionary* dictionary);
|
436
489
|
|
437
490
|
/**
|
438
491
|
* Gets an encoder library version.
|
439
492
|
*
|
440
|
-
* Look at
|
493
|
+
* Look at BROTLI_MAKE_HEX_VERSION for more information.
|
441
494
|
*/
|
442
495
|
BROTLI_ENC_API uint32_t BrotliEncoderVersion(void);
|
443
496
|
|
@@ -224,14 +224,6 @@
|
|
224
224
|
#define BROTLI_HAS_FEATURE(feature) (0)
|
225
225
|
#endif
|
226
226
|
|
227
|
-
#if defined(ADDRESS_SANITIZER) || BROTLI_HAS_FEATURE(address_sanitizer) || \
|
228
|
-
defined(THREAD_SANITIZER) || BROTLI_HAS_FEATURE(thread_sanitizer) || \
|
229
|
-
defined(MEMORY_SANITIZER) || BROTLI_HAS_FEATURE(memory_sanitizer)
|
230
|
-
#define BROTLI_SANITIZED 1
|
231
|
-
#else
|
232
|
-
#define BROTLI_SANITIZED 0
|
233
|
-
#endif
|
234
|
-
|
235
227
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
236
228
|
#define BROTLI_PUBLIC
|
237
229
|
#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
|
@@ -247,9 +239,28 @@
|
|
247
239
|
#define BROTLI_PUBLIC
|
248
240
|
#endif
|
249
241
|
|
250
|
-
|
251
|
-
|
252
|
-
|
242
|
+
/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
|
243
|
+
#if !defined(BROTLI_INTERNAL)
|
244
|
+
#if defined(_WIN32) || defined(__CYGWIN__)
|
245
|
+
#define BROTLI_INTERNAL
|
246
|
+
#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
|
247
|
+
BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
|
248
|
+
BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
|
249
|
+
BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
|
250
|
+
BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
|
251
|
+
BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
|
252
|
+
(BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
|
253
|
+
defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
|
254
|
+
#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
|
255
|
+
#else
|
256
|
+
#define BROTLI_INTERNAL
|
257
|
+
#endif
|
258
|
+
#endif
|
259
|
+
|
260
|
+
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
|
261
|
+
!defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
|
262
|
+
!defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__) && \
|
263
|
+
!defined(__clang__)
|
253
264
|
#define BROTLI_ARRAY_PARAM(name) (name)
|
254
265
|
#else
|
255
266
|
#define BROTLI_ARRAY_PARAM(name)
|
@@ -285,4 +296,10 @@
|
|
285
296
|
#define BROTLI_ENC_API
|
286
297
|
#endif
|
287
298
|
|
299
|
+
#if defined(BROTLI_BUILD_ENC_EXTRA_API)
|
300
|
+
#define BROTLI_ENC_EXTRA_API BROTLI_ENC_API
|
301
|
+
#else
|
302
|
+
#define BROTLI_ENC_EXTRA_API BROTLI_INTERNAL
|
303
|
+
#endif
|
304
|
+
|
288
305
|
#endif /* BROTLI_COMMON_PORT_H_ */
|
@@ -0,0 +1,100 @@
|
|
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
|
+
/* (Opaque) Shared Dictionary definition and utilities. */
|
8
|
+
|
9
|
+
#ifndef BROTLI_COMMON_SHARED_DICTIONARY_H_
|
10
|
+
#define BROTLI_COMMON_SHARED_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
|
+
#define SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
|
20
|
+
#define SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH 31
|
21
|
+
#define SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS 64
|
22
|
+
#define SHARED_BROTLI_MAX_COMPOUND_DICTS 15
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Opaque structure that holds shared dictionary data.
|
26
|
+
*
|
27
|
+
* Allocated and initialized with ::BrotliSharedDictionaryCreateInstance.
|
28
|
+
* Cleaned up and deallocated with ::BrotliSharedDictionaryDestroyInstance.
|
29
|
+
*/
|
30
|
+
typedef struct BrotliSharedDictionaryStruct BrotliSharedDictionary;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Input data type for ::BrotliSharedDictionaryAttach.
|
34
|
+
*/
|
35
|
+
typedef enum BrotliSharedDictionaryType {
|
36
|
+
/** Raw LZ77 prefix dictionary. */
|
37
|
+
BROTLI_SHARED_DICTIONARY_RAW = 0,
|
38
|
+
/** Serialized shared dictionary.
|
39
|
+
*
|
40
|
+
* DO NOT USE: methods accepting this value will fail.
|
41
|
+
*/
|
42
|
+
BROTLI_SHARED_DICTIONARY_SERIALIZED = 1
|
43
|
+
} BrotliSharedDictionaryType;
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Creates an instance of ::BrotliSharedDictionary.
|
47
|
+
*
|
48
|
+
* Fresh instance has default word dictionary and transforms
|
49
|
+
* and no LZ77 prefix dictionary.
|
50
|
+
*
|
51
|
+
* @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
|
52
|
+
* case they are both zero, default memory allocators are used. @p opaque is
|
53
|
+
* passed to @p alloc_func and @p free_func when they are called. @p free_func
|
54
|
+
* has to return without doing anything when asked to free a NULL pointer.
|
55
|
+
*
|
56
|
+
* @param alloc_func custom memory allocation function
|
57
|
+
* @param free_func custom memory free function
|
58
|
+
* @param opaque custom memory manager handle
|
59
|
+
* @returns @c 0 if instance can not be allocated or initialized
|
60
|
+
* @returns pointer to initialized ::BrotliSharedDictionary otherwise
|
61
|
+
*/
|
62
|
+
BROTLI_COMMON_API BrotliSharedDictionary* BrotliSharedDictionaryCreateInstance(
|
63
|
+
brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Deinitializes and frees ::BrotliSharedDictionary instance.
|
67
|
+
*
|
68
|
+
* @param dict shared dictionary instance to be cleaned up and deallocated
|
69
|
+
*/
|
70
|
+
BROTLI_COMMON_API void BrotliSharedDictionaryDestroyInstance(
|
71
|
+
BrotliSharedDictionary* dict);
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Attaches dictionary to a given instance of ::BrotliSharedDictionary.
|
75
|
+
*
|
76
|
+
* Dictionary to be attached is represented in a serialized format as a region
|
77
|
+
* of memory.
|
78
|
+
*
|
79
|
+
* Provided data it partially referenced by a resulting (compound) dictionary,
|
80
|
+
* and should be kept untouched, while at least one compound dictionary uses it.
|
81
|
+
* This way memory overhead is kept minimal by the cost of additional resource
|
82
|
+
* management.
|
83
|
+
*
|
84
|
+
* @param dict dictionary to extend
|
85
|
+
* @param type type of dictionary to attach
|
86
|
+
* @param data_size size of @p data
|
87
|
+
* @param data serialized dictionary of type @p type, with at least @p data_size
|
88
|
+
* addressable bytes
|
89
|
+
* @returns ::BROTLI_TRUE if provided dictionary is successfully attached
|
90
|
+
* @returns ::BROTLI_FALSE otherwise
|
91
|
+
*/
|
92
|
+
BROTLI_COMMON_API BROTLI_BOOL BrotliSharedDictionaryAttach(
|
93
|
+
BrotliSharedDictionary* dict, BrotliSharedDictionaryType type,
|
94
|
+
size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);
|
95
|
+
|
96
|
+
#if defined(__cplusplus) || defined(c_plusplus)
|
97
|
+
} /* extern "C" */
|
98
|
+
#endif
|
99
|
+
|
100
|
+
#endif /* BROTLI_COMMON_SHARED_DICTIONARY_H_ */
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brotli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- miyucy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Brotli compressor/decompressor
|
14
14
|
email:
|
@@ -53,6 +53,8 @@ files:
|
|
53
53
|
- vendor/brotli/c/common/dictionary.h
|
54
54
|
- vendor/brotli/c/common/platform.c
|
55
55
|
- vendor/brotli/c/common/platform.h
|
56
|
+
- vendor/brotli/c/common/shared_dictionary.c
|
57
|
+
- vendor/brotli/c/common/shared_dictionary_internal.h
|
56
58
|
- vendor/brotli/c/common/transform.c
|
57
59
|
- vendor/brotli/c/common/transform.h
|
58
60
|
- vendor/brotli/c/common/version.h
|
@@ -83,6 +85,8 @@ files:
|
|
83
85
|
- vendor/brotli/c/enc/cluster_inc.h
|
84
86
|
- vendor/brotli/c/enc/command.c
|
85
87
|
- vendor/brotli/c/enc/command.h
|
88
|
+
- vendor/brotli/c/enc/compound_dictionary.c
|
89
|
+
- vendor/brotli/c/enc/compound_dictionary.h
|
86
90
|
- vendor/brotli/c/enc/compress_fragment.c
|
87
91
|
- vendor/brotli/c/enc/compress_fragment.h
|
88
92
|
- vendor/brotli/c/enc/compress_fragment_two_pass.c
|
@@ -120,6 +124,7 @@ files:
|
|
120
124
|
- vendor/brotli/c/enc/prefix.h
|
121
125
|
- vendor/brotli/c/enc/quality.h
|
122
126
|
- vendor/brotli/c/enc/ringbuffer.h
|
127
|
+
- vendor/brotli/c/enc/state.h
|
123
128
|
- vendor/brotli/c/enc/static_dict.c
|
124
129
|
- vendor/brotli/c/enc/static_dict.h
|
125
130
|
- vendor/brotli/c/enc/static_dict_lut.h
|
@@ -129,6 +134,7 @@ files:
|
|
129
134
|
- vendor/brotli/c/include/brotli/decode.h
|
130
135
|
- vendor/brotli/c/include/brotli/encode.h
|
131
136
|
- vendor/brotli/c/include/brotli/port.h
|
137
|
+
- vendor/brotli/c/include/brotli/shared_dictionary.h
|
132
138
|
- vendor/brotli/c/include/brotli/types.h
|
133
139
|
homepage: https://github.com/miyucy/brotli
|
134
140
|
licenses:
|
@@ -149,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
155
|
- !ruby/object:Gem::Version
|
150
156
|
version: '0'
|
151
157
|
requirements: []
|
152
|
-
rubygems_version: 3.
|
158
|
+
rubygems_version: 3.5.11
|
153
159
|
signing_key:
|
154
160
|
specification_version: 4
|
155
161
|
summary: Brotli compressor/decompressor
|