|
@@ -39,25 +39,25 @@ constexpr u32 Popcnt(u32 n) {
|
|
|
|
|
|
|
|
class InputBitStream {
|
|
class InputBitStream {
|
|
|
public:
|
|
public:
|
|
|
- explicit InputBitStream(const u8* ptr, std::size_t start_offset = 0)
|
|
|
|
|
- : cur_byte(ptr), next_bit(start_offset % 8) {}
|
|
|
|
|
|
|
+ constexpr explicit InputBitStream(const u8* ptr, std::size_t start_offset = 0)
|
|
|
|
|
+ : cur_byte{ptr}, next_bit{start_offset % 8} {}
|
|
|
|
|
|
|
|
- std::size_t GetBitsRead() const {
|
|
|
|
|
- return m_BitsRead;
|
|
|
|
|
|
|
+ constexpr std::size_t GetBitsRead() const {
|
|
|
|
|
+ return bits_read;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- u32 ReadBit() {
|
|
|
|
|
- u32 bit = *cur_byte >> next_bit++;
|
|
|
|
|
|
|
+ constexpr bool ReadBit() {
|
|
|
|
|
+ const bool bit = (*cur_byte >> next_bit++) & 1;
|
|
|
while (next_bit >= 8) {
|
|
while (next_bit >= 8) {
|
|
|
next_bit -= 8;
|
|
next_bit -= 8;
|
|
|
cur_byte++;
|
|
cur_byte++;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- m_BitsRead++;
|
|
|
|
|
- return bit & 1;
|
|
|
|
|
|
|
+ bits_read++;
|
|
|
|
|
+ return bit;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- u32 ReadBits(std::size_t nBits) {
|
|
|
|
|
|
|
+ constexpr u32 ReadBits(std::size_t nBits) {
|
|
|
u32 ret = 0;
|
|
u32 ret = 0;
|
|
|
for (std::size_t i = 0; i < nBits; ++i) {
|
|
for (std::size_t i = 0; i < nBits; ++i) {
|
|
|
ret |= (ReadBit() & 1) << i;
|
|
ret |= (ReadBit() & 1) << i;
|
|
@@ -66,7 +66,7 @@ public:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <std::size_t nBits>
|
|
template <std::size_t nBits>
|
|
|
- u32 ReadBits() {
|
|
|
|
|
|
|
+ constexpr u32 ReadBits() {
|
|
|
u32 ret = 0;
|
|
u32 ret = 0;
|
|
|
for (std::size_t i = 0; i < nBits; ++i) {
|
|
for (std::size_t i = 0; i < nBits; ++i) {
|
|
|
ret |= (ReadBit() & 1) << i;
|
|
ret |= (ReadBit() & 1) << i;
|
|
@@ -77,7 +77,7 @@ public:
|
|
|
private:
|
|
private:
|
|
|
const u8* cur_byte;
|
|
const u8* cur_byte;
|
|
|
std::size_t next_bit = 0;
|
|
std::size_t next_bit = 0;
|
|
|
- std::size_t m_BitsRead = 0;
|
|
|
|
|
|
|
+ std::size_t bits_read = 0;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
class OutputBitStream {
|
|
class OutputBitStream {
|