Edit

kc3-lang/brotli/dec/bit_reader.c

Branch :

  • Show log

    Commit

  • Author : Eugene Kliuchnikov
    Date : 2016-08-23 14:40:33
    Hash : 81480011
    Message : Move "public" to "include/brotli"

  • dec/bit_reader.c
  • /* Copyright 2013 Google Inc. All Rights Reserved.
    
       Distributed under MIT license.
       See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
    */
    
    /* Bit reading helpers */
    
    #include "./bit_reader.h"
    
    #include <brotli/types.h>
    #include "./port.h"
    
    #if defined(__cplusplus) || defined(c_plusplus)
    extern "C" {
    #endif
    
    void BrotliInitBitReader(BrotliBitReader* const br) {
      br->val_ = 0;
      br->bit_pos_ = sizeof(br->val_) << 3;
    }
    
    BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) {
      size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
      /* Fixing alignment after unaligned BrotliFillWindow would result accumulator
         overflow. If unalignment is caused by BrotliSafeReadBits, then there is
         enough space in accumulator to fix aligment. */
      if (!BROTLI_ALIGNED_READ) {
        aligned_read_mask = 0;
      }
      if (BrotliGetAvailableBits(br) == 0) {
        if (!BrotliPullByte(br)) {
          return BROTLI_FALSE;
        }
      }
    
      while ((((size_t)br->next_in) & aligned_read_mask) != 0) {
        if (!BrotliPullByte(br)) {
          /* If we consumed all the input, we don't care about the alignment. */
          return BROTLI_TRUE;
        }
      }
      return BROTLI_TRUE;
    }
    
    #if defined(__cplusplus) || defined(c_plusplus)
    }  /* extern "C" */
    #endif