- 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>
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* NOLINT(build/header_guard) */
 | |
| /* Copyright 2013 Google Inc. All Rights Reserved.
 | |
| 
 | |
|    Distributed under MIT license.
 | |
|    See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
 | |
| */
 | |
| 
 | |
| /* template parameters: Histogram, DATA_SIZE, DataType */
 | |
| 
 | |
| /* A simple container for histograms of data in blocks. */
 | |
| 
 | |
| typedef struct FN(Histogram) {
 | |
|   uint32_t data_[DATA_SIZE];
 | |
|   size_t total_count_;
 | |
|   double bit_cost_;
 | |
| } FN(Histogram);
 | |
| 
 | |
| static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
 | |
|   memset(self->data_, 0, sizeof(self->data_));
 | |
|   self->total_count_ = 0;
 | |
|   self->bit_cost_ = HUGE_VAL;
 | |
| }
 | |
| 
 | |
| static BROTLI_INLINE void FN(ClearHistograms)(
 | |
|     FN(Histogram)* array, size_t length) {
 | |
|   size_t i;
 | |
|   for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
 | |
| }
 | |
| 
 | |
| static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {
 | |
|   ++self->data_[val];
 | |
|   ++self->total_count_;
 | |
| }
 | |
| 
 | |
| static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
 | |
|     const DataType *p, size_t n) {
 | |
|   self->total_count_ += n;
 | |
|   n += 1;
 | |
|   while (--n) ++self->data_[*p++];
 | |
| }
 | |
| 
 | |
| static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
 | |
|     const FN(Histogram)* v) {
 | |
|   size_t i;
 | |
|   self->total_count_ += v->total_count_;
 | |
|   for (i = 0; i < DATA_SIZE; ++i) {
 | |
|     self->data_[i] += v->data_[i];
 | |
|   }
 | |
| }
 | |
| 
 | |
| static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }
 |