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