diff options
Diffstat (limited to 'Source/ThirdParty/brotli/dec/bit_reader.h')
-rw-r--r-- | Source/ThirdParty/brotli/dec/bit_reader.h | 73 |
1 files changed, 25 insertions, 48 deletions
diff --git a/Source/ThirdParty/brotli/dec/bit_reader.h b/Source/ThirdParty/brotli/dec/bit_reader.h index 7096afaa3..30e6761b2 100644 --- a/Source/ThirdParty/brotli/dec/bit_reader.h +++ b/Source/ThirdParty/brotli/dec/bit_reader.h @@ -11,20 +11,14 @@ #include <string.h> /* memcpy */ +#include <brotli/types.h> #include "./port.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif -#if (BROTLI_64_BITS) -#define BROTLI_SHORT_FILL_BIT_WINDOW_READ 4 -typedef uint64_t reg_t; -#else -#define BROTLI_SHORT_FILL_BIT_WINDOW_READ 2 -typedef uint32_t reg_t; -#endif +#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(reg_t) >> 1) static const uint32_t kBitMask[33] = { 0x0000, 0x00000001, 0x00000003, 0x00000007, 0x0000000F, @@ -61,14 +55,14 @@ typedef struct { size_t avail_in; } BrotliBitReaderState; -/* Initializes the bitreader fields. */ +/* Initializes the BrotliBitReader fields. */ BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br); /* Ensures that accumulator is not empty. May consume one byte of input. Returns 0 if data is required but there is no input available. For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned reading. */ -BROTLI_INTERNAL int BrotliWarmupBitReader(BrotliBitReader* const br); +BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br); static BROTLI_INLINE void BrotliBitReaderSaveState( BrotliBitReader* const from, BrotliBitReaderState* to) { @@ -97,11 +91,11 @@ static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) { return br->avail_in + (BrotliGetAvailableBits(br) >> 3); } -/* Checks if there is at least num bytes left in the input ringbuffer (excluding - the bits remaining in br->val_). */ -static BROTLI_INLINE int BrotliCheckInputAmount( +/* Checks if there is at least |num| bytes left in the input ring-buffer + (excluding the bits remaining in br->val_). */ +static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount( BrotliBitReader* const br, size_t num) { - return br->avail_in >= num; + return TO_BROTLI_BOOL(br->avail_in >= num); } static BROTLI_INLINE uint16_t BrotliLoad16LE(const uint8_t* in) { @@ -163,7 +157,7 @@ static BROTLI_INLINE uint64_t BrotliLoad64LE(const uint8_t* in) { /* Guarantees that there are at least n_bits + 1 bits in accumulator. Precondition: accumulator contains at least 1 bit. n_bits should be in the range [1..24] for regular build. For portable - non-64-bit little endian build only 16 bits are safe to request. */ + non-64-bit little-endian build only 16 bits are safe to request. */ static BROTLI_INLINE void BrotliFillBitWindow( BrotliBitReader* const br, uint32_t n_bits) { #if (BROTLI_64_BITS) @@ -213,16 +207,16 @@ static BROTLI_INLINE void BrotliFillBitWindow( #endif } -/* Mosltly like BrotliFillBitWindow, but guarantees only 16 bits and reads no +/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */ static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) { BrotliFillBitWindow(br, 17); } /* Pulls one byte of input to accumulator. */ -static BROTLI_INLINE int BrotliPullByte(BrotliBitReader* const br) { +static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) { if (br->avail_in == 0) { - return 0; + return BROTLI_FALSE; } br->val_ >>= 8; #if (BROTLI_64_BITS) @@ -233,11 +227,11 @@ static BROTLI_INLINE int BrotliPullByte(BrotliBitReader* const br) { br->bit_pos_ -= 8; --br->avail_in; ++br->next_in; - return 1; + return BROTLI_TRUE; } /* Returns currently available bits. - The number of valid bits could be calclulated by BrotliGetAvailableBits. */ + The number of valid bits could be calculated by BrotliGetAvailableBits. */ static BROTLI_INLINE reg_t BrotliGetBitsUnmasked(BrotliBitReader* const br) { return br->val_ >> br->bit_pos_; } @@ -250,7 +244,7 @@ static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked( return (uint32_t)BrotliGetBitsUnmasked(br); } -/* Returns the specified number of bits from br without advancing bit pos. */ +/* Returns the specified number of bits from |br| without advancing bit pos. */ static BROTLI_INLINE uint32_t BrotliGetBits( BrotliBitReader* const br, uint32_t n_bits) { BrotliFillBitWindow(br, n_bits); @@ -259,15 +253,15 @@ static BROTLI_INLINE uint32_t BrotliGetBits( /* Tries to peek the specified amount of bits. Returns 0, if there is not enough input. */ -static BROTLI_INLINE int BrotliSafeGetBits( +static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { while (BrotliGetAvailableBits(br) < n_bits) { if (!BrotliPullByte(br)) { - return 0; + return BROTLI_FALSE; } } *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits); - return 1; + return BROTLI_TRUE; } /* Advances the bit pos by n_bits. */ @@ -289,7 +283,7 @@ static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) { br->bit_pos_ += unused_bits; } -/* Reads the specified number of bits from br and advances the bit pos. +/* Reads the specified number of bits from |br| and advances the bit pos. Precondition: accumulator MUST contain at least n_bits. */ static BROTLI_INLINE void BrotliTakeBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { @@ -299,7 +293,7 @@ static BROTLI_INLINE void BrotliTakeBits( BrotliDropBits(br, n_bits); } -/* Reads the specified number of bits from br and advances the bit pos. +/* Reads the specified number of bits from |br| and advances the bit pos. Assumes that there is enough input to perform BrotliFillBitWindow. */ static BROTLI_INLINE uint32_t BrotliReadBits( BrotliBitReader* const br, uint32_t n_bits) { @@ -321,43 +315,26 @@ static BROTLI_INLINE uint32_t BrotliReadBits( /* Tries to read the specified amount of bits. Returns 0, if there is not enough input. n_bits MUST be positive. */ -static BROTLI_INLINE int BrotliSafeReadBits( +static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { while (BrotliGetAvailableBits(br) < n_bits) { if (!BrotliPullByte(br)) { - return 0; + return BROTLI_FALSE; } } BrotliTakeBits(br, n_bits, val); - return 1; + return BROTLI_TRUE; } /* Advances the bit reader position to the next byte boundary and verifies that any skipped bits are set to zero. */ -static BROTLI_INLINE int BrotliJumpToByteBoundary(BrotliBitReader* br) { +static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) { uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7; uint32_t pad_bits = 0; if (pad_bits_count != 0) { BrotliTakeBits(br, pad_bits_count, &pad_bits); } - return pad_bits == 0; -} - -/* Peeks a byte at specified offset. - Precondition: bit reader is parked to a byte boundary. - Returns -1 if operation is not feasible. */ -static BROTLI_INLINE int BrotliPeekByte(BrotliBitReader* br, size_t offset) { - uint32_t available_bits = BrotliGetAvailableBits(br); - size_t bytes_left = available_bits >> 3; - BROTLI_DCHECK((available_bits & 7) == 0); - if (offset < bytes_left) { - return (BrotliGetBitsUnmasked(br) >> (unsigned)(offset << 3)) & 0xFF; - } - offset -= bytes_left; - if (offset < br->avail_in) { - return br->next_in[offset]; - } - return -1; + return TO_BROTLI_BOOL(pad_bits == 0); } /* Copies remaining input bytes stored in the bit reader to the output. Value |