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 "./bit_reader.h" 10 11 #include "../common/platform.h" 12 #include <brotli/types.h> 13 14 #if defined(__cplusplus) || defined(c_plusplus) 15 extern "C" { 16 #endif 17 BrotliInitBitReader(BrotliBitReader * const br)18void BrotliInitBitReader(BrotliBitReader* const br) { 19 br->val_ = 0; 20 br->bit_pos_ = sizeof(br->val_) << 3; 21 } 22 BrotliWarmupBitReader(BrotliBitReader * const br)23BROTLI_BOOL 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 alignment. */ 28 if (!BROTLI_ALIGNED_READ) { 29 aligned_read_mask = 0; 30 } 31 if (BrotliGetAvailableBits(br) == 0) { 32 if (!BrotliPullByte(br)) { 33 return BROTLI_FALSE; 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 BROTLI_TRUE; 41 } 42 } 43 return BROTLI_TRUE; 44 } 45 46 #if defined(__cplusplus) || defined(c_plusplus) 47 } /* extern "C" */ 48 #endif 49