mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-27 01:03:45 +01:00 
			
		
		
		
	- Copy Brotli algorithm 3rd party source code for tool Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bell Song <binx.song@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 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
 | |
| */
 | |
| 
 | |
| /* 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
 |