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
 |