#include "BitStream.hpp"
namespace util {
const uint8_t bitmasks[] = {0, 128, 192, 224, 240, 248, 252, 254};
BitStreamReader::BitStreamReader(uint8_t *b, size_t s) : BitStream(b, s, 0, false) {}
BitStreamReader::~BitStreamReader() {}
void BitStreamReader::flush() {
this->position = this->get_last_byte_position() * 8u;
}
uint8_t BitStreamReader::get_bit() {
const size_t current_start_byte = this->position / 8u;
if (current_start_byte >= this->get_size()) {
// Prevent reading byte outside of array (-> Valgrind flagged)
return 0u;
}
const size_t bits_taken = this->position % 8;
const uint8_t value = this->buffer[current_start_byte];
this->position++;
return (value & (1 << (7 - bits_taken))) != 0;
}
uint32_t BitStreamReader::get(size_t l) {
uint32_t value = 0;
for (size_t i = 0; i < l; i++) {
const uint32_t v = this->get_bit();
value |= v << (l - i - 1);
//printf("%s %d pos %d i %d v %d value %x\n", __func__, __LINE__, position, i, v, value);
}
return value;
}
////////////////////////////////////////////////////////////////////////////////////
BitStreamWriter::BitStreamWriter(size_t s)
: BitStream(util::allocArray