| Index: third_party/brotli/enc/cluster.c
|
| diff --git a/third_party/brotli/dec/bit_reader.c b/third_party/brotli/enc/cluster.c
|
| similarity index 23%
|
| copy from third_party/brotli/dec/bit_reader.c
|
| copy to third_party/brotli/enc/cluster.c
|
| index cde90af56e4f72cb4b30087f4456f689c5d217eb..bb663278470f88f10f0c3b7e73548bc21e758e3a 100644
|
| --- a/third_party/brotli/dec/bit_reader.c
|
| +++ b/third_party/brotli/enc/cluster.c
|
| @@ -4,45 +4,53 @@
|
| See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
|
| */
|
|
|
| -/* Bit reading helpers */
|
| +/* Functions for clustering similar histograms together. */
|
|
|
| -#include "./bit_reader.h"
|
| +#include "./cluster.h"
|
|
|
| +#include <brotli/types.h>
|
| +#include "./bit_cost.h" /* BrotliPopulationCost */
|
| +#include "./fast_log.h"
|
| +#include "./histogram.h"
|
| +#include "./memory.h"
|
| #include "./port.h"
|
| -#include "./types.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;
|
| -}
|
| -
|
| -int 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 0;
|
| - }
|
| +static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
|
| + const HistogramPair* p1, const HistogramPair* p2) {
|
| + if (p1->cost_diff != p2->cost_diff) {
|
| + return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);
|
| }
|
| + return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));
|
| +}
|
|
|
| - 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 1;
|
| - }
|
| - }
|
| - return 1;
|
| +/* Returns entropy reduction of the context map when we combine two clusters. */
|
| +static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
|
| + size_t size_c = size_a + size_b;
|
| + return (double)size_a * FastLog2(size_a) +
|
| + (double)size_b * FastLog2(size_b) -
|
| + (double)size_c * FastLog2(size_c);
|
| }
|
|
|
| +#define CODE(X) X
|
| +
|
| +#define FN(X) X ## Literal
|
| +#include "./cluster_inc.h" /* NOLINT(build/include) */
|
| +#undef FN
|
| +
|
| +#define FN(X) X ## Command
|
| +#include "./cluster_inc.h" /* NOLINT(build/include) */
|
| +#undef FN
|
| +
|
| +#define FN(X) X ## Distance
|
| +#include "./cluster_inc.h" /* NOLINT(build/include) */
|
| +#undef FN
|
| +
|
| +#undef CODE
|
| +
|
| #if defined(__cplusplus) || defined(c_plusplus)
|
| } /* extern "C" */
|
| #endif
|
|
|