9#ifndef BROTLI_DEC_BIT_READER_H_
10#define BROTLI_DEC_BIT_READER_H_
16#include <brotli/types.h>
18#if defined(__cplusplus) || defined(c_plusplus)
22#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
30 return ~((0xFFFFFFFFu) << n);
92 if (br->
avail_in > kCap)
return kCap;
93 return br->
avail_in + (BrotliGetAvailableBits(br) >> 3);
114 br->
val_ |= BROTLI_UNALIGNED_LOAD64LE(br->
next_in) << 8;
123 br->
val_ |= BROTLI_UNALIGNED_LOAD64LE(br->
next_in) << 16;
131 br->
val_ |= ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->
next_in)) << 32;
141 br->
val_ |= BROTLI_UNALIGNED_LOAD32LE(br->
next_in) << 8;
149 br->
val_ |= ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->
next_in)) << 16;
160 BrotliFillBitWindow(br, 17);
192 BrotliFillBitWindow(br, 16);
193 return (uint32_t)BrotliGetBitsUnmasked(br);
200 BrotliFillBitWindow(br, n_bits);
201 return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
208 while (BrotliGetAvailableBits(br) < n_bits) {
209 if (!BrotliPullByte(br)) {
213 *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
224 uint32_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
225 uint32_t unused_bits = unused_bytes << 3;
228 if (unused_bits ==
sizeof(br->
val_) << 3) {
231 br->
val_ <<= unused_bits;
240 *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
241 BROTLI_LOG((
"[BrotliTakeBits] %d %d %d val: %6x\n",
243 BrotliDropBits(br, n_bits);
254 BrotliFillBitWindow(br, n_bits);
255 BrotliTakeBits(br, n_bits, &val);
260 BrotliFillBitWindow(br, 16);
261 BrotliTakeBits(br, 16, &low_val);
262 BrotliFillBitWindow(br, 8);
263 BrotliTakeBits(br, n_bits - 16, &high_val);
264 return low_val | (high_val << 16);
274 BrotliFillBitWindow(br, n_bits);
275 BrotliTakeBits(br, n_bits, &val);
280 BrotliFillBitWindow(br, 16);
281 BrotliTakeBits(br, 16, &low_val);
282 BrotliFillBitWindow(br, 16);
283 BrotliTakeBits(br, n_bits - 16, &high_val);
284 return low_val | (high_val << 16);
294 while (BrotliGetAvailableBits(br) < n_bits) {
295 if (!BrotliPullByte(br)) {
299 BrotliTakeBits(br, n_bits, val);
308 while (BrotliGetAvailableBits(br) < n_bits) {
309 if (!BrotliPullByte(br)) {
313 BrotliTakeBits(br, n_bits, val);
323 uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
324 uint32_t pad_bits = 0;
325 if (pad_bits_count != 0) {
326 BrotliTakeBits(br, pad_bits_count, &pad_bits);
336 while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
337 *
dest = (uint8_t)BrotliGetBitsUnmasked(br);
338 BrotliDropBits(br, 8);
347#if defined(__cplusplus) || defined(c_plusplus)
#define BROTLI_LARGE_MAX_WBITS
Definition constants.h:57
BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader *const br)
Definition bit_reader.c:34
BROTLI_INTERNAL const uint32_t kBrotliBitMask[33]
Definition bit_reader.c:18
#define BROTLI_SHORT_FILL_BIT_WINDOW_READ
Definition bit_reader.h:22
BROTLI_INTERNAL BROTLI_NOINLINE BROTLI_BOOL BrotliSafeReadBits32Slow(BrotliBitReader *const br, uint32_t n_bits, uint32_t *val)
Definition bit_reader.c:57
BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader *const br)
Definition bit_reader.c:29
char * dest
Definition lz4.h:806
Definition bit_reader.h:36
size_t avail_in
Definition bit_reader.h:40
brotli_reg_t val_
Definition bit_reader.h:37
uint32_t bit_pos_
Definition bit_reader.h:38
const uint8_t * next_in
Definition bit_reader.h:39
Definition bit_reader.h:43
size_t avail_in
Definition bit_reader.h:47
brotli_reg_t val_
Definition bit_reader.h:44
uint32_t bit_pos_
Definition bit_reader.h:45
const uint8_t * next_in
Definition bit_reader.h:46
#define BROTLI_TRUE
Definition types.h:51
#define BROTLI_FALSE
Definition types.h:53
#define TO_BROTLI_BOOL(X)
Definition types.h:55
#define BROTLI_BOOL
Definition types.h:49