From 56de283899bc91f7110aba58a3ca174c10852683 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Thu, 14 Nov 2019 09:07:29 +0100 Subject: Issue #1288 - Part 1a: Update brotli to 1.0.7 This also reorganizes the exports in the build system to use `brotli/` as include directory. --- modules/brotli/enc/bit_cost.h | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 modules/brotli/enc/bit_cost.h (limited to 'modules/brotli/enc/bit_cost.h') diff --git a/modules/brotli/enc/bit_cost.h b/modules/brotli/enc/bit_cost.h new file mode 100644 index 000000000..6586469e6 --- /dev/null +++ b/modules/brotli/enc/bit_cost.h @@ -0,0 +1,63 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions to estimate the bit cost of Huffman trees. */ + +#ifndef BROTLI_ENC_BIT_COST_H_ +#define BROTLI_ENC_BIT_COST_H_ + +#include "../common/platform.h" +#include +#include "./fast_log.h" +#include "./histogram.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static BROTLI_INLINE double ShannonEntropy( + const uint32_t* population, size_t size, size_t* total) { + size_t sum = 0; + double retval = 0; + const uint32_t* population_end = population + size; + size_t p; + if (size & 1) { + goto odd_number_of_elements_left; + } + while (population < population_end) { + p = *population++; + sum += p; + retval -= (double)p * FastLog2(p); + odd_number_of_elements_left: + p = *population++; + sum += p; + retval -= (double)p * FastLog2(p); + } + if (sum) retval += (double)sum * FastLog2(sum); + *total = sum; + return retval; +} + +static BROTLI_INLINE double BitsEntropy( + const uint32_t* population, size_t size) { + size_t sum; + double retval = ShannonEntropy(population, size, &sum); + if (retval < sum) { + /* At least one bit per literal is needed. */ + retval = (double)sum; + } + return retval; +} + +BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*); +BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*); +BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BIT_COST_H_ */ -- cgit v1.2.3