41 lines
927 B
C++
41 lines
927 B
C++
|
#pragma once
|
||
|
|
||
|
namespace demonware
|
||
|
{
|
||
|
class bit_buffer final
|
||
|
{
|
||
|
public:
|
||
|
bit_buffer() = default;
|
||
|
|
||
|
explicit bit_buffer(std::string buffer) : buffer_(std::move(buffer))
|
||
|
{
|
||
|
}
|
||
|
|
||
|
bool read_bytes(unsigned int bytes, unsigned char* output);
|
||
|
bool read_bool(bool* output);
|
||
|
bool read_uint32(unsigned int* output);
|
||
|
bool read_data_type(char expected);
|
||
|
|
||
|
bool write_bytes(unsigned int bytes, const char* data);
|
||
|
bool write_bytes(unsigned int bytes, const unsigned char* data);
|
||
|
bool write_bool(bool data);
|
||
|
bool write_int32(int data);
|
||
|
bool write_uint32(unsigned int data);
|
||
|
bool write_data_type(char data);
|
||
|
|
||
|
bool read(unsigned int bits, void* output);
|
||
|
bool write(unsigned int bits, const void* data);
|
||
|
|
||
|
void set_use_data_types(bool use_data_types);
|
||
|
|
||
|
unsigned int size() const;
|
||
|
|
||
|
std::string& get_buffer();
|
||
|
|
||
|
private:
|
||
|
std::string buffer_{};
|
||
|
unsigned int current_bit_ = 0;
|
||
|
bool use_data_types_ = true;
|
||
|
};
|
||
|
}
|