| /* 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 |