123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #ifndef RTC_BASE_BIT_BUFFER_H_
- #define RTC_BASE_BIT_BUFFER_H_
- #include <stddef.h>
- #include <stdint.h>
- #include "rtc_base/constructor_magic.h"
- namespace rtc {
- class BitBuffer {
- public:
- BitBuffer(const uint8_t* bytes, size_t byte_count);
-
-
- void GetCurrentOffset(size_t* out_byte_offset, size_t* out_bit_offset);
-
- uint64_t RemainingBitCount() const;
-
-
- bool ReadUInt8(uint8_t* val);
- bool ReadUInt16(uint16_t* val);
- bool ReadUInt32(uint32_t* val);
-
-
- bool ReadBits(uint32_t* val, size_t bit_count);
-
-
-
- bool PeekBits(uint32_t* val, size_t bit_count);
-
-
-
-
-
-
-
-
-
-
- bool ReadNonSymmetric(uint32_t* val, uint32_t num_values);
-
-
-
-
-
-
-
-
- bool ReadExponentialGolomb(uint32_t* val);
-
-
-
- bool ReadSignedExponentialGolomb(int32_t* val);
-
-
- bool ConsumeBytes(size_t byte_count);
-
-
- bool ConsumeBits(size_t bit_count);
-
-
- bool Seek(size_t byte_offset, size_t bit_offset);
- protected:
- const uint8_t* const bytes_;
-
- size_t byte_count_;
-
- size_t byte_offset_;
-
- size_t bit_offset_;
- RTC_DISALLOW_COPY_AND_ASSIGN(BitBuffer);
- };
- class BitBufferWriter : public BitBuffer {
- public:
-
- BitBufferWriter(uint8_t* bytes, size_t byte_count);
-
-
- bool WriteUInt8(uint8_t val);
- bool WriteUInt16(uint16_t val);
- bool WriteUInt32(uint32_t val);
-
-
- bool WriteBits(uint64_t val, size_t bit_count);
-
-
-
-
- bool WriteNonSymmetric(uint32_t val, uint32_t num_values);
-
- static size_t SizeNonSymmetricBits(uint32_t val, uint32_t num_values);
-
-
- bool WriteExponentialGolomb(uint32_t val);
-
-
-
- bool WriteSignedExponentialGolomb(int32_t val);
- private:
-
- uint8_t* const writable_bytes_;
- RTC_DISALLOW_COPY_AND_ASSIGN(BitBufferWriter);
- };
- }
- #endif
|