1 /* Copyright 2013 Google Inc. All Rights Reserved. 2 3 Distributed under MIT license. 4 See file LICENSE for detail or copy at https://opensource.org/licenses/MIT 5 */ 6 7 /* Models the histograms of literals, commands and distance codes. */ 8 9 #ifndef BROTLI_ENC_HISTOGRAM_H_ 10 #define BROTLI_ENC_HISTOGRAM_H_ 11 12 #include <string.h> /* memset */ 13 14 #include "../common/constants.h" 15 #include "../common/context.h" 16 #include "../common/platform.h" 17 #include <brotli/types.h> 18 #include "block_splitter.h" 19 #include "command.h" 20 21 #if defined(__cplusplus) || defined(c_plusplus) 22 extern "C" { 23 #endif 24 25 /* The distance symbols effectively used by "Large Window Brotli" (32-bit). */ 26 #define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544 27 28 #define FN(X) X ## Literal 29 #define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS 30 #define DataType uint8_t 31 #include "histogram_inc.h" /* NOLINT(build/include) */ 32 #undef DataType 33 #undef DATA_SIZE 34 #undef FN 35 36 #define FN(X) X ## Command 37 #define DataType uint16_t 38 #define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS 39 #include "histogram_inc.h" /* NOLINT(build/include) */ 40 #undef DATA_SIZE 41 #undef FN 42 43 #define FN(X) X ## Distance 44 #define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 45 #include "histogram_inc.h" /* NOLINT(build/include) */ 46 #undef DataType 47 #undef DATA_SIZE 48 #undef FN 49 50 BROTLI_INTERNAL void BrotliBuildHistogramsWithContext( 51 const Command* cmds, const size_t num_commands, 52 const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split, 53 const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos, 54 size_t mask, uint8_t prev_byte, uint8_t prev_byte2, 55 const ContextType* context_modes, HistogramLiteral* literal_histograms, 56 HistogramCommand* insert_and_copy_histograms, 57 HistogramDistance* copy_dist_histograms); 58 59 #if defined(__cplusplus) || defined(c_plusplus) 60 } /* extern "C" */ 61 #endif 62 63 #endif /* BROTLI_ENC_HISTOGRAM_H_ */ 64