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 <brotli/types.h> 16 #include "./block_splitter.h" 17 #include "./command.h" 18 #include "./context.h" 19 #include "./port.h" 20 21 #if defined(__cplusplus) || defined(c_plusplus) 22 extern "C" { 23 #endif 24 25 #define FN(X) X ## Literal 26 #define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS 27 #define DataType uint8_t 28 #include "./histogram_inc.h" /* NOLINT(build/include) */ 29 #undef DataType 30 #undef DATA_SIZE 31 #undef FN 32 33 #define FN(X) X ## Command 34 #define DataType uint16_t 35 #define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS 36 #include "./histogram_inc.h" /* NOLINT(build/include) */ 37 #undef DATA_SIZE 38 #undef FN 39 40 #define FN(X) X ## Distance 41 #define DATA_SIZE BROTLI_NUM_DISTANCE_SYMBOLS 42 #include "./histogram_inc.h" /* NOLINT(build/include) */ 43 #undef DataType 44 #undef DATA_SIZE 45 #undef FN 46 47 BROTLI_INTERNAL void BrotliBuildHistogramsWithContext( 48 const Command* cmds, const size_t num_commands, 49 const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split, 50 const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos, 51 size_t mask, uint8_t prev_byte, uint8_t prev_byte2, 52 const ContextType* context_modes, HistogramLiteral* literal_histograms, 53 HistogramCommand* insert_and_copy_histograms, 54 HistogramDistance* copy_dist_histograms); 55 56 #if defined(__cplusplus) || defined(c_plusplus) 57 } /* extern "C" */ 58 #endif 59 60 #endif /* BROTLI_ENC_HISTOGRAM_H_ */ 61