16#ifndef DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_
17#define DRACO_COMPRESSION_BIT_CODERS_DIRECT_BIT_DECODER_H_
35 const uint32_t selector = 1 << (31 - num_used_bits_);
36 if (pos_ == bits_.end()) {
39 const bool bit = *pos_ & selector;
41 if (num_used_bits_ == 32) {
53 const int remaining = 32 - num_used_bits_;
54 if (nbits <= remaining) {
55 if (pos_ == bits_.end()) {
58 *value = (*pos_ << num_used_bits_) >> (32 - nbits);
59 num_used_bits_ += nbits;
60 if (num_used_bits_ == 32) {
65 if (pos_ + 1 == bits_.end()) {
68 const uint32_t value_l = ((*pos_) << num_used_bits_);
69 num_used_bits_ = nbits - remaining;
71 const uint32_t value_r = (*pos_) >> (32 - num_used_bits_);
72 *value = (value_l >> (32 - num_used_bits_ - remaining)) | value_r;
82 std::vector<uint32_t> bits_;
83 std::vector<uint32_t>::const_iterator pos_;
84 uint32_t num_used_bits_;
Definition decoder_buffer.h:30
~DirectBitDecoder()
Definition direct_bit_decoder.cc:23
bool DecodeLeastSignificantBits32(int nbits, uint32_t *value)
Definition direct_bit_decoder.h:50
bool DecodeNextBit()
Definition direct_bit_decoder.h:34
DirectBitDecoder()
Definition direct_bit_decoder.cc:21
void EndDecoding()
Definition direct_bit_decoder.h:77
bool StartDecoding(DecoderBuffer *source_buffer)
Definition direct_bit_decoder.cc:25
#define DRACO_DCHECK_EQ(a, b)
Definition macros.h:81
Definition attribute_octahedron_transform.cc:21