forked from tianocore/edk2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BaseTools: Copy Brotli algorithm 3rd party source code for tool
- Copy Brotli algorithm 3rd party source code for tool Cc: Liming Gao <[email protected]> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bell Song <[email protected]> Reviewed-by: Liming Gao <[email protected]>
- Loading branch information
Showing
78 changed files
with
44,183 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in | ||
all copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
THE SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
### Introduction | ||
|
||
Brotli is a generic-purpose lossless compression algorithm that compresses data | ||
using a combination of a modern variant of the LZ77 algorithm, Huffman coding | ||
and 2nd order context modeling, with a compression ratio comparable to the best | ||
currently available general-purpose compression methods. It is similar in speed | ||
with deflate but offers more dense compression. | ||
|
||
The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://www.ietf.org/rfc/rfc7932.txt). | ||
|
||
Brotli is open-sourced under the MIT License, see the LICENSE file. | ||
|
||
Brotli mailing list: | ||
https://groups.google.com/forum/#!forum/brotli | ||
|
||
[![Build Status](https://travis-ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli) | ||
|
||
### Benchmarks | ||
* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/) | ||
* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html) | ||
* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark) | ||
|
||
### Related projects | ||
Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification. | ||
|
||
JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/* Copyright 2016 Google Inc. All Rights Reserved. | ||
Distributed under MIT license. | ||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | ||
*/ | ||
|
||
#ifndef BROTLI_COMMON_CONSTANTS_H_ | ||
#define BROTLI_COMMON_CONSTANTS_H_ | ||
|
||
/* Specification: 7.3. Encoding of the context map */ | ||
#define BROTLI_CONTEXT_MAP_MAX_RLE 16 | ||
|
||
/* Specification: 2. Compressed representation overview */ | ||
#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256 | ||
|
||
/* Specification: 3.3. Alphabet sizes: insert-and-copy length */ | ||
#define BROTLI_NUM_LITERAL_SYMBOLS 256 | ||
#define BROTLI_NUM_COMMAND_SYMBOLS 704 | ||
#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26 | ||
#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \ | ||
BROTLI_CONTEXT_MAP_MAX_RLE) | ||
#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2) | ||
|
||
/* Specification: 3.5. Complex prefix codes */ | ||
#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16 | ||
#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17 | ||
#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1) | ||
/* "code length of 8 is repeated" */ | ||
#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8 | ||
|
||
/* Specification: 4. Encoding of distances */ | ||
#define BROTLI_NUM_DISTANCE_SHORT_CODES 16 | ||
#define BROTLI_MAX_NPOSTFIX 3 | ||
#define BROTLI_MAX_NDIRECT 120 | ||
/* BROTLI_NUM_DISTANCE_SYMBOLS == 520 */ | ||
#define BROTLI_NUM_DISTANCE_SYMBOLS (BROTLI_NUM_DISTANCE_SHORT_CODES + \ | ||
BROTLI_MAX_NDIRECT + \ | ||
(24 << (BROTLI_MAX_NPOSTFIX + 1))) | ||
|
||
/* 7.1. Context modes and context ID lookup for literals */ | ||
/* "context IDs for literals are in the range of 0..63" */ | ||
#define BROTLI_LITERAL_CONTEXT_BITS 6 | ||
|
||
/* 7.2. Context ID for distances */ | ||
#define BROTLI_DISTANCE_CONTEXT_BITS 2 | ||
|
||
#endif /* BROTLI_COMMON_CONSTANTS_H_ */ |
9,474 changes: 9,474 additions & 0 deletions
9,474
BaseTools/Source/C/BrotliCompress/common/dictionary.c
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* Copyright 2013 Google Inc. All Rights Reserved. | ||
Distributed under MIT license. | ||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | ||
*/ | ||
|
||
/* Collection of static dictionary words. */ | ||
|
||
#ifndef BROTLI_COMMON_DICTIONARY_H_ | ||
#define BROTLI_COMMON_DICTIONARY_H_ | ||
|
||
#include "./types.h" | ||
|
||
#if defined(__cplusplus) || defined(c_plusplus) | ||
extern "C" { | ||
#endif | ||
|
||
extern const uint8_t kBrotliDictionary[122784]; | ||
extern const uint32_t kBrotliDictionaryOffsetsByLength[25]; | ||
extern const uint8_t kBrotliDictionarySizeBitsByLength[25]; | ||
|
||
#define kBrotliMinDictionaryWordLength 4 | ||
#define kBrotliMaxDictionaryWordLength 24 | ||
|
||
#if defined(__cplusplus) || defined(c_plusplus) | ||
} /* extern "C" */ | ||
#endif | ||
|
||
#endif /* BROTLI_COMMON_DICTIONARY_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
/* Copyright 2016 Google Inc. All Rights Reserved. | ||
Distributed under MIT license. | ||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | ||
*/ | ||
|
||
/* Macros for compiler / platform specific features and build options. */ | ||
|
||
#ifndef BROTLI_COMMON_PORT_H_ | ||
#define BROTLI_COMMON_PORT_H_ | ||
|
||
/* Compatibility with non-clang compilers. */ | ||
#ifndef __has_builtin | ||
#define __has_builtin(x) 0 | ||
#endif | ||
|
||
#ifndef __has_attribute | ||
#define __has_attribute(x) 0 | ||
#endif | ||
|
||
#ifndef __has_feature | ||
#define __has_feature(x) 0 | ||
#endif | ||
|
||
#if defined(__GNUC__) && defined(__GNUC_MINOR__) | ||
#define BROTLI_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) | ||
#else | ||
#define BROTLI_GCC_VERSION 0 | ||
#endif | ||
|
||
#if defined(__ICC) | ||
#define BROTLI_ICC_VERSION __ICC | ||
#else | ||
#define BROTLI_ICC_VERSION 0 | ||
#endif | ||
|
||
#if defined(BROTLI_BUILD_MODERN_COMPILER) | ||
#define BROTLI_MODERN_COMPILER 1 | ||
#elif BROTLI_GCC_VERSION > 300 || BROTLI_ICC_VERSION >= 1600 | ||
#define BROTLI_MODERN_COMPILER 1 | ||
#else | ||
#define BROTLI_MODERN_COMPILER 0 | ||
#endif | ||
|
||
/* Define "PREDICT_TRUE" and "PREDICT_FALSE" macros for capable compilers. | ||
To apply compiler hint, enclose the branching condition into macros, like this: | ||
if (PREDICT_TRUE(zero == 0)) { | ||
// main execution path | ||
} else { | ||
// compiler should place this code outside of main execution path | ||
} | ||
OR: | ||
if (PREDICT_FALSE(something_rare_or_unexpected_happens)) { | ||
// compiler should place this code outside of main execution path | ||
} | ||
*/ | ||
#if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_expect) | ||
#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) | ||
#define PREDICT_FALSE(x) (__builtin_expect(x, 0)) | ||
#else | ||
#define PREDICT_FALSE(x) (x) | ||
#define PREDICT_TRUE(x) (x) | ||
#endif | ||
|
||
#if BROTLI_MODERN_COMPILER || __has_attribute(always_inline) | ||
#define ATTRIBUTE_ALWAYS_INLINE __attribute__ ((always_inline)) | ||
#else | ||
#define ATTRIBUTE_ALWAYS_INLINE | ||
#endif | ||
|
||
#if defined(_WIN32) || defined(__CYGWIN__) | ||
#define ATTRIBUTE_VISIBILITY_HIDDEN | ||
#elif BROTLI_MODERN_COMPILER || __has_attribute(visibility) | ||
#define ATTRIBUTE_VISIBILITY_HIDDEN __attribute__ ((visibility ("hidden"))) | ||
#else | ||
#define ATTRIBUTE_VISIBILITY_HIDDEN | ||
#endif | ||
|
||
#ifndef BROTLI_INTERNAL | ||
#define BROTLI_INTERNAL ATTRIBUTE_VISIBILITY_HIDDEN | ||
#endif | ||
|
||
#ifndef _MSC_VER | ||
#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ | ||
__STDC_VERSION__ >= 199901L | ||
#define BROTLI_INLINE inline ATTRIBUTE_ALWAYS_INLINE | ||
#else | ||
#define BROTLI_INLINE | ||
#endif | ||
#else /* _MSC_VER */ | ||
#define BROTLI_INLINE __forceinline | ||
#endif /* _MSC_VER */ | ||
|
||
#if BROTLI_MODERN_COMPILER || __has_attribute(noinline) | ||
#define BROTLI_NOINLINE __attribute__((noinline)) | ||
#else | ||
#define BROTLI_NOINLINE | ||
#endif | ||
|
||
#define BROTLI_UNUSED(X) (void)(X) | ||
|
||
#endif /* BROTLI_COMMON_PORT_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* Copyright 2013 Google Inc. All Rights Reserved. | ||
Distributed under MIT license. | ||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | ||
*/ | ||
|
||
/* Common types */ | ||
|
||
#ifndef BROTLI_COMMON_TYPES_H_ | ||
#define BROTLI_COMMON_TYPES_H_ | ||
|
||
#include <stddef.h> /* for size_t */ | ||
|
||
#if defined(_MSC_VER) && (_MSC_VER < 1600) | ||
typedef __int8 int8_t; | ||
typedef unsigned __int8 uint8_t; | ||
typedef __int16 int16_t; | ||
typedef unsigned __int16 uint16_t; | ||
typedef __int32 int32_t; | ||
typedef unsigned __int32 uint32_t; | ||
typedef unsigned __int64 uint64_t; | ||
typedef __int64 int64_t; | ||
#else | ||
#include <stdint.h> | ||
#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ | ||
|
||
#if (!defined(_MSC_VER) || (_MSC_VER >= 1800)) && \ | ||
(defined(__cplusplus) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)) | ||
#include <stdbool.h> | ||
#define BROTLI_BOOL bool | ||
#define BROTLI_TRUE true | ||
#define BROTLI_FALSE false | ||
#define TO_BROTLI_BOOL(X) (!!(X)) | ||
#else | ||
typedef enum { | ||
BROTLI_FALSE = 0, | ||
BROTLI_TRUE = !BROTLI_FALSE | ||
} BROTLI_BOOL; | ||
#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE) | ||
#endif | ||
|
||
#define MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low) | ||
|
||
#define BROTLI_UINT32_MAX (~((uint32_t)0)) | ||
#define BROTLI_SIZE_MAX (~((size_t)0)) | ||
|
||
/* Allocating function pointer. Function MUST return 0 in the case of failure. | ||
Otherwise it MUST return a valid pointer to a memory region of at least | ||
size length. Neither items nor size are allowed to be 0. | ||
opaque argument is a pointer provided by client and could be used to bind | ||
function to specific object (memory pool). */ | ||
typedef void* (*brotli_alloc_func)(void* opaque, size_t size); | ||
|
||
/* Deallocating function pointer. Function SHOULD be no-op in the case the | ||
address is 0. */ | ||
typedef void (*brotli_free_func)(void* opaque, void* address); | ||
|
||
#endif /* BROTLI_COMMON_TYPES_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* Copyright 2013 Google Inc. All Rights Reserved. | ||
Distributed under MIT license. | ||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | ||
*/ | ||
|
||
/* Bit reading helpers */ | ||
|
||
#include "./bit_reader.h" | ||
|
||
#include "../common/types.h" | ||
#include "./port.h" | ||
|
||
#if defined(__cplusplus) || defined(c_plusplus) | ||
extern "C" { | ||
#endif | ||
|
||
void BrotliInitBitReader(BrotliBitReader* const br) { | ||
br->val_ = 0; | ||
br->bit_pos_ = sizeof(br->val_) << 3; | ||
} | ||
|
||
BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) { | ||
size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1; | ||
/* Fixing alignment after unaligned BrotliFillWindow would result accumulator | ||
overflow. If unalignment is caused by BrotliSafeReadBits, then there is | ||
enough space in accumulator to fix aligment. */ | ||
if (!BROTLI_ALIGNED_READ) { | ||
aligned_read_mask = 0; | ||
} | ||
if (BrotliGetAvailableBits(br) == 0) { | ||
if (!BrotliPullByte(br)) { | ||
return BROTLI_FALSE; | ||
} | ||
} | ||
|
||
while ((((size_t)br->next_in) & aligned_read_mask) != 0) { | ||
if (!BrotliPullByte(br)) { | ||
/* If we consumed all the input, we don't care about the alignment. */ | ||
return BROTLI_TRUE; | ||
} | ||
} | ||
return BROTLI_TRUE; | ||
} | ||
|
||
#if defined(__cplusplus) || defined(c_plusplus) | ||
} /* extern "C" */ | ||
#endif |
Oops, something went wrong.