/* NOLINT(build/header_guard) */ | |
/* Copyright 2014 Google Inc. All Rights Reserved. | |
Distributed under MIT license. | |
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | |
*/ | |
/* template parameters: FN */ | |
#define HistogramType FN(Histogram) | |
/* Creates entropy codes for all block types and stores them to the bit | |
stream. */ | |
static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self, | |
const HistogramType* histograms, const size_t histograms_size, | |
HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) { | |
const size_t alphabet_size = self->alphabet_size_; | |
const size_t table_size = histograms_size * alphabet_size; | |
self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size); | |
self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size); | |
if (BROTLI_IS_OOM(m)) return; | |
{ | |
size_t i; | |
for (i = 0; i < histograms_size; ++i) { | |
size_t ix = i * alphabet_size; | |
BuildAndStoreHuffmanTree(&histograms[i].data_[0], alphabet_size, tree, | |
&self->depths_[ix], &self->bits_[ix], storage_ix, storage); | |
} | |
} | |
} | |
#undef HistogramType |