https://bugzilla.tianocore.org/show_bug.cgi?id=1201 Update Brotli to the latest version 1.0.6 https://github.com/google/brotli Verify VS2017, GCC5 build. Verify Decompression boot functionality. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright 2013 Google Inc. All Rights Reserved.
 | |
| 
 | |
|    Distributed under MIT license.
 | |
|    See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
 | |
| */
 | |
| 
 | |
| /* Function to find backward reference copies. */
 | |
| 
 | |
| #include "./backward_references.h"
 | |
| 
 | |
| #include "../common/constants.h"
 | |
| #include "../common/dictionary.h"
 | |
| #include "../common/platform.h"
 | |
| #include <brotli/types.h>
 | |
| #include "./command.h"
 | |
| #include "./dictionary_hash.h"
 | |
| #include "./memory.h"
 | |
| #include "./quality.h"
 | |
| 
 | |
| #if defined(__cplusplus) || defined(c_plusplus)
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
 | |
|                                                 size_t max_distance,
 | |
|                                                 const int* dist_cache) {
 | |
|   if (distance <= max_distance) {
 | |
|     size_t distance_plus_3 = distance + 3;
 | |
|     size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
 | |
|     size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
 | |
|     if (distance == (size_t)dist_cache[0]) {
 | |
|       return 0;
 | |
|     } else if (distance == (size_t)dist_cache[1]) {
 | |
|       return 1;
 | |
|     } else if (offset0 < 7) {
 | |
|       return (0x9750468 >> (4 * offset0)) & 0xF;
 | |
|     } else if (offset1 < 7) {
 | |
|       return (0xFDB1ACE >> (4 * offset1)) & 0xF;
 | |
|     } else if (distance == (size_t)dist_cache[2]) {
 | |
|       return 2;
 | |
|     } else if (distance == (size_t)dist_cache[3]) {
 | |
|       return 3;
 | |
|     }
 | |
|   }
 | |
|   return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
 | |
| }
 | |
| 
 | |
| #define EXPAND_CAT(a, b) CAT(a, b)
 | |
| #define CAT(a, b) a ## b
 | |
| #define FN(X) EXPAND_CAT(X, HASHER())
 | |
| #define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
 | |
| 
 | |
| #define PREFIX() N
 | |
| 
 | |
| #define HASHER() H2
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H3
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H4
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H5
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H6
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H40
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H41
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H42
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H54
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H35
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H55
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #define HASHER() H65
 | |
| /* NOLINTNEXTLINE(build/include) */
 | |
| #include "./backward_references_inc.h"
 | |
| #undef HASHER
 | |
| 
 | |
| #undef PREFIX
 | |
| 
 | |
| #undef EXPORT_FN
 | |
| #undef FN
 | |
| #undef CAT
 | |
| #undef EXPAND_CAT
 | |
| 
 | |
| void BrotliCreateBackwardReferences(
 | |
|     size_t num_bytes, size_t position, const uint8_t* ringbuffer,
 | |
|     size_t ringbuffer_mask, const BrotliEncoderParams* params,
 | |
|     HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
 | |
|     Command* commands, size_t* num_commands, size_t* num_literals) {
 | |
|   switch (params->hasher.type) {
 | |
| #define CASE_(N)                                                  \
 | |
|     case N:                                                       \
 | |
|       CreateBackwardReferencesNH ## N(                            \
 | |
|           num_bytes, position, ringbuffer,                        \
 | |
|           ringbuffer_mask, params, hasher, dist_cache,            \
 | |
|           last_insert_len, commands, num_commands, num_literals); \
 | |
|       return;
 | |
|     FOR_GENERIC_HASHERS(CASE_)
 | |
| #undef CASE_
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| #if defined(__cplusplus) || defined(c_plusplus)
 | |
| }  /* extern "C" */
 | |
| #endif
 |