130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Copyright 2013 Google Inc. All Rights Reserved.
230625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
330625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Licensed under the Apache License, Version 2.0 (the "License");
430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   you may not use this file except in compliance with the License.
530625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   You may obtain a copy of the License at
630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
730625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   http://www.apache.org/licenses/LICENSE-2.0
830625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
930625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Unless required by applicable law or agreed to in writing, software
1030625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   distributed under the License is distributed on an "AS IS" BASIS,
1130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1230625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   See the License for the specific language governing permissions and
1330625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   limitations under the License.
1430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
1530625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Bit reading helpers
1630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka*/
1704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
1804163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#include <assert.h>
191571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka#include <stdlib.h>
2004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2104163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#include "./bit_reader.h"
2204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#if defined(__cplusplus) || defined(c_plusplus)
2404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadkaextern "C" {
2504163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#endif
2604163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
271571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadkaint BrotliInitBitReader(BrotliBitReader* const br, BrotliInput input) {
2804163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  size_t i;
2904163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  assert(br != NULL);
3004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
31dfc5a9f2151a7c88914c236c7db8fa119fee249cZoltan Szabadka  br->buf_ptr_ = br->buf_;
321571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka  br->input_ = input;
3304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  br->val_ = 0;
3404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  br->pos_ = 0;
3504163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  br->bit_pos_ = 0;
36cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka  br->bit_end_pos_ = 0;
3704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  br->eos_ = 0;
381571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka  if (!BrotliReadMoreInput(br)) {
391571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka    return 0;
4004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  }
411571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka  for (i = 0; i < sizeof(br->val_); ++i) {
421571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka    br->val_ |= ((uint64_t)br->buf_[br->pos_]) << (8 * i);
4304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka    ++br->pos_;
4404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka  }
45cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka  return (br->bit_end_pos_ > 0);
4604163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka}
4704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
4804163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#if defined(__cplusplus) || defined(c_plusplus)
4930625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka}    /* extern "C" */
5004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#endif
51