diff options
Diffstat (limited to 'Source/ThirdParty/brotli/dec/huffman.c')
-rw-r--r-- | Source/ThirdParty/brotli/dec/huffman.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/Source/ThirdParty/brotli/dec/huffman.c b/Source/ThirdParty/brotli/dec/huffman.c index 3775ffe7e..37da2a563 100644 --- a/Source/ThirdParty/brotli/dec/huffman.c +++ b/Source/ThirdParty/brotli/dec/huffman.c @@ -10,8 +10,9 @@ #include <string.h> /* memcpy, memset */ +#include "../common/constants.h" +#include <brotli/types.h> #include "./port.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -20,7 +21,8 @@ extern "C" { #define BROTLI_REVERSE_BITS_MAX 8 #ifdef BROTLI_RBIT -#define BROTLI_REVERSE_BITS_BASE (32 - BROTLI_REVERSE_BITS_MAX) +#define BROTLI_REVERSE_BITS_BASE \ + ((sizeof(reg_t) << 3) - BROTLI_REVERSE_BITS_MAX) #else #define BROTLI_REVERSE_BITS_BASE 0 static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = { @@ -60,12 +62,12 @@ static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = { #endif /* BROTLI_RBIT */ #define BROTLI_REVERSE_BITS_LOWEST \ - (1U << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE)) + ((reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE)) /* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX), where reverse(value, len) is the bit-wise reversal of the len least significant bits of value. */ -static BROTLI_INLINE uint32_t BrotliReverseBits(uint32_t num) { +static BROTLI_INLINE reg_t BrotliReverseBits(reg_t num) { #ifdef BROTLI_RBIT return BROTLI_RBIT(num); #else @@ -102,13 +104,13 @@ static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count, void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table, const uint8_t* const code_lengths, uint16_t* count) { - HuffmanCode code; /* current table entry */ - int symbol; /* symbol index in original or sorted table */ - uint32_t key; /* prefix code */ - uint32_t key_step; /* prefix code addend */ - int step; /* step size to replicate values in current table */ - int table_size; /* size of current table */ - int sorted[18]; /* symbols sorted by code length */ + HuffmanCode code; /* current table entry */ + int symbol; /* symbol index in original or sorted table */ + reg_t key; /* prefix code */ + reg_t key_step; /* prefix code addend */ + int step; /* step size to replicate values in current table */ + int table_size; /* size of current table */ + int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */ /* offsets in sorted table for each length */ int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1]; int bits; @@ -125,10 +127,10 @@ void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table, bits++; }); /* Symbols with code length 0 are placed after all other symbols. */ - offset[0] = 17; + offset[0] = BROTLI_CODE_LENGTH_CODES - 1; /* sort symbols by length, by symbol order within each length */ - symbol = 18; + symbol = BROTLI_CODE_LENGTH_CODES; do { BROTLI_REPEAT(6, { symbol--; @@ -142,7 +144,7 @@ void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table, if (offset[0] == 0) { code.bits = 0; code.value = (uint16_t)sorted[0]; - for (key = 0; key < (uint32_t)table_size; ++key) { + for (key = 0; key < (reg_t)table_size; ++key) { table[key] = code; } return; @@ -170,18 +172,18 @@ uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table, int root_bits, const uint16_t* const symbol_lists, uint16_t* count) { - HuffmanCode code; /* current table entry */ - HuffmanCode* table; /* next available space in table */ - int len; /* current code length */ - int symbol; /* symbol index in original or sorted table */ - uint32_t key; /* prefix code */ - uint32_t key_step; /* prefix code addend */ - uint32_t sub_key; /* 2nd level table prefix code */ - uint32_t sub_key_step; /* 2nd level table prefix code addend */ - int step; /* step size to replicate values in current table */ - int table_bits; /* key length of current table */ - int table_size; /* size of current table */ - int total_size; /* sum of root table size and 2nd level table sizes */ + HuffmanCode code; /* current table entry */ + HuffmanCode* table; /* next available space in table */ + int len; /* current code length */ + int symbol; /* symbol index in original or sorted table */ + reg_t key; /* prefix code */ + reg_t key_step; /* prefix code addend */ + reg_t sub_key; /* 2nd level table prefix code */ + reg_t sub_key_step; /* 2nd level table prefix code addend */ + int step; /* step size to replicate values in current table */ + int table_bits; /* key length of current table */ + int table_size; /* size of current table */ + int total_size; /* sum of root table size and 2nd level table sizes */ int max_length = -1; int bits; int bits_count; |