9#ifndef BROTLI_DEC_BIT_READER_H_
10#define BROTLI_DEC_BIT_READER_H_
14#include <brotli/types.h>
19#if defined(__cplusplus) || defined(c_plusplus)
23#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
26#define BROTLI_FAST_INPUT_SLACK 28
43 const uint8_t* next_in;
44 const uint8_t* guard_in;
45 const uint8_t* last_in;
51 const uint8_t* next_in;
81 to->
avail_in = BrotliBitReaderGetAvailIn(from);
87 br->
last_in = (avail_in == 0) ? next_in : (next_in + avail_in);
113 size_t avail_in = BrotliBitReaderGetAvailIn(br);
114 if (avail_in > kCap)
return kCap;
115 return avail_in + (BrotliGetAvailableBits(br) >> 3);
131 !((val >> offset) & ~new_bits & ~(~((
brotli_reg_t)0) << count)));
133 return val | (new_bits << offset);
147 br->
val_ = BrotliBitReaderLoadBits(br->
val_,
148 BROTLI_UNALIGNED_LOAD64LE(br->
next_in), 56, bit_pos);
156 br->
val_ = BrotliBitReaderLoadBits(br->
val_,
157 BROTLI_UNALIGNED_LOAD64LE(br->
next_in), 48, bit_pos);
164 br->
val_ = BrotliBitReaderLoadBits(br->
val_,
165 (uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->
next_in), 32, bit_pos);
175 br->
val_ = BrotliBitReaderLoadBits(br->
val_,
176 BROTLI_UNALIGNED_LOAD32LE(br->
next_in), 24, bit_pos);
183 br->
val_ = BrotliBitReaderLoadBits(br->
val_,
184 (uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->
next_in), 16, bit_pos);
195 BrotliFillBitWindow(br, 17);
204 br->
val_ = BrotliBitReaderLoadBits(br->
val_,
222 BrotliFillBitWindow(br, 16);
230 BrotliFillBitWindow(br, n_bits);
231 return BrotliGetBitsUnmasked(br) & BitMask(n_bits);
238 while (BrotliGetAvailableBits(br) < n_bits) {
239 if (!BrotliPullByte(br)) {
243 *val = BrotliGetBitsUnmasked(br) & BitMask(n_bits);
265 brotli_reg_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
268 (unused_bytes == 0) ? br->
next_in : (br->next_in - unused_bytes);
270 BrotliBitReaderNormalize(br);
278 *val = BrotliGetBitsUnmasked(br) & BitMask(n_bits);
279 BROTLI_LOG((
"[BrotliTakeBits] %d %d %d val: %6x\n",
280 (
int)BrotliBitReaderGetAvailIn(br), (
int)br->
bit_pos_,
281 (
int)n_bits, (
int)*val));
282 BrotliDropBits(br, n_bits);
293 BrotliFillBitWindow(br, n_bits);
294 BrotliTakeBits(br, n_bits, &val);
299 BrotliFillBitWindow(br, 16);
300 BrotliTakeBits(br, 16, &low_val);
301 BrotliFillBitWindow(br, 8);
302 BrotliTakeBits(br, n_bits - 16, &high_val);
303 return low_val | (high_val << 16);
313 BrotliFillBitWindow(br, n_bits);
314 BrotliTakeBits(br, n_bits, &val);
319 BrotliFillBitWindow(br, 16);
320 BrotliTakeBits(br, 16, &low_val);
321 BrotliFillBitWindow(br, 16);
322 BrotliTakeBits(br, n_bits - 16, &high_val);
323 return low_val | (high_val << 16);
333 while (BrotliGetAvailableBits(br) < n_bits) {
334 if (!BrotliPullByte(br)) {
338 BrotliTakeBits(br, n_bits, val);
347 while (BrotliGetAvailableBits(br) < n_bits) {
348 if (!BrotliPullByte(br)) {
352 BrotliTakeBits(br, n_bits, val);
362 brotli_reg_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
364 if (pad_bits_count != 0) {
365 BrotliTakeBits(br, pad_bits_count, &pad_bits);
367 BrotliBitReaderNormalize(br);
383 while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
384 *
dest = (uint8_t)BrotliGetBitsUnmasked(br);
385 BrotliDropBits(br, 8);
389 BrotliBitReaderNormalize(br);
392 BrotliDropBytes(br, num);
419#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
#define BROTLI_FAST_INPUT_SLACK
Definition bit_reader.h:26
BROTLI_UNUSED_FUNCTION void BrotliBitReaderSuppressUnusedFunctions(void)
Definition bit_reader.h:396
char * dest
Definition lz4.h:806
Definition bit_reader.h:36
const uint8_t * guard_in
Definition bit_reader.h:44
const uint8_t * last_in
Definition bit_reader.h:45
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