Initial commit
[io-compress-brotli.git] / dec / bit_reader.c
CommitLineData
f9995f31
MG
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/* Bit reading helpers */
8
9#include <stdlib.h>
10
11#include "./bit_reader.h"
12#include "./port.h"
13
14#if defined(__cplusplus) || defined(c_plusplus)
15extern "C" {
16#endif
17
18void BrotliInitBitReader(BrotliBitReader* const br) {
19 br->val_ = 0;
20 br->bit_pos_ = sizeof(br->val_) << 3;
21}
22
23int BrotliWarmupBitReader(BrotliBitReader* const br) {
24 size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
25 /* Fixing alignment after unaligned BrotliFillWindow would result accumulator
26 overflow. If unalignment is caused by BrotliSafeReadBits, then there is
27 enough space in accumulator to fix aligment. */
28 if (!BROTLI_ALIGNED_READ) {
29 aligned_read_mask = 0;
30 }
31 if (BrotliGetAvailableBits(br) == 0) {
32 if (!BrotliPullByte(br)) {
33 return 0;
34 }
35 }
36
37 while ((((size_t)br->next_in) & aligned_read_mask) != 0) {
38 if (!BrotliPullByte(br)) {
39 /* If we consumed all the input, we don't care about the alignment. */
40 return 1;
41 }
42 }
43 return 1;
44}
45
46#if defined(__cplusplus) || defined(c_plusplus)
47} /* extern "C" */
48#endif
This page took 0.012304 seconds and 4 git commands to generate.