15#ifndef DRACO_CORE_ENCODER_BUFFER_H_
16#define DRACO_CORE_ENCODER_BUFFER_H_
33 void Resize(int64_t nbytes);
53 bit_encoder_->PutBits(value, nbits);
64 const uint8_t *src_data =
reinterpret_cast<const uint8_t *
>(&
data);
65 buffer_.insert(buffer_.end(), src_data, src_data +
sizeof(
T));
72 const uint8_t *src_data =
reinterpret_cast<const uint8_t *
>(
data);
73 buffer_.insert(buffer_.end(), src_data, src_data + data_size);
78 const char *
data()
const {
return buffer_.data(); }
79 size_t size()
const {
return buffer_.size(); }
80 std::vector<char> *
buffer() {
return &buffer_; }
87 explicit BitEncoder(
char *
data) : bit_buffer_(
data), bit_offset_(0) {}
90 void PutBits(uint32_t
data, int32_t nbits) {
93 for (int32_t bit = 0; bit < nbits; ++bit) {
94 PutBit((
data >> bit) & 1);
99 uint64_t Bits()
const {
return static_cast<uint64_t
>(bit_offset_); }
107 static uint32_t BitsRequired(uint32_t x) {
112 void PutBit(uint8_t value) {
113 const int byte_size = 8;
114 const uint64_t off =
static_cast<uint64_t
>(bit_offset_);
115 const uint64_t byte_offset = off / byte_size;
116 const int bit_shift = off % byte_size;
122 bit_buffer_[byte_offset] &= ~(1 << bit_shift);
123 bit_buffer_[byte_offset] |= value << bit_shift;
132 std::vector<char> buffer_;
139 std::unique_ptr<BitEncoder> bit_encoder_;
143 int64_t bit_encoder_reserved_bytes_;
147 bool encode_bit_sequence_size_;
bool bit_encoder_active() const
Definition encoder_buffer.h:77
void Resize(int64_t nbytes)
Definition encoder_buffer.cc:31
friend class BufferBitCodingTest
Definition encoder_buffer.h:130
void EndBitEncoding()
Definition encoder_buffer.cc:58
EncoderBuffer()
Definition encoder_buffer.cc:23
void Clear()
Definition encoder_buffer.cc:26
std::vector< char > * buffer()
Definition encoder_buffer.h:80
bool StartBitEncoding(int64_t required_bits, bool encode_size)
Definition encoder_buffer.cc:33
bool Encode(const T &data)
Definition encoder_buffer.h:60
size_t size() const
Definition encoder_buffer.h:79
const char * data() const
Definition encoder_buffer.h:78
bool Encode(const void *data, size_t data_size)
Definition encoder_buffer.h:68
bool EncodeLeastSignificantBits32(int nbits, uint32_t value)
Definition encoder_buffer.h:49
#define DRACO_DCHECK_LE(a, b)
Definition macros.h:85
#define DRACO_DCHECK_GE(a, b)
Definition macros.h:83
lazy data
Definition meshpage.php:1583
Definition attribute_octahedron_transform.cc:21
int MostSignificantBit(uint32_t n)
Definition bit_utils.h:58