76 lines
2.2 KiB
C++
76 lines
2.2 KiB
C++
|
#pragma once
|
||
|
|
||
|
namespace demonware
|
||
|
{
|
||
|
class byte_buffer final
|
||
|
{
|
||
|
public:
|
||
|
byte_buffer() = default;
|
||
|
|
||
|
explicit byte_buffer(std::string buffer) : buffer_(std::move(buffer))
|
||
|
{
|
||
|
}
|
||
|
|
||
|
bool read_bool(bool* output);
|
||
|
bool read_byte(char* output);
|
||
|
bool read_ubyte(unsigned char* output);
|
||
|
bool read_int16(short* output);
|
||
|
bool read_uint16(unsigned short* output);
|
||
|
bool read_int32(int* output);
|
||
|
bool read_uint32(unsigned int* output);
|
||
|
bool read_int64(__int64* output);
|
||
|
bool read_uint64(unsigned __int64* output);
|
||
|
bool read_float(float* output);
|
||
|
bool read_string(char** output);
|
||
|
bool read_string(char* output, int length);
|
||
|
bool read_string(std::string* output);
|
||
|
bool read_blob(char** output, int* length);
|
||
|
bool read_blob(std::string* output);
|
||
|
bool read_struct(char** output, int* length);
|
||
|
bool read_struct(std::string* output);
|
||
|
bool read_data_type(char expected);
|
||
|
|
||
|
bool read_array_header(unsigned char expected, unsigned int* element_count,
|
||
|
unsigned int* element_size = nullptr);
|
||
|
|
||
|
bool write_bool(bool data);
|
||
|
bool write_byte(char data);
|
||
|
bool write_ubyte(unsigned char data);
|
||
|
bool write_int16(short data);
|
||
|
bool write_uint16(unsigned short data);
|
||
|
bool write_int32(int data);
|
||
|
bool write_uint32(unsigned int data);
|
||
|
bool write_int64(__int64 data);
|
||
|
bool write_uint64(unsigned __int64 data);
|
||
|
bool write_data_type(char data);
|
||
|
bool write_float(float data);
|
||
|
bool write_string(const char* data);
|
||
|
bool write_string(const std::string& data);
|
||
|
bool write_blob(const char* data, int length);
|
||
|
bool write_blob(const std::string& data);
|
||
|
bool write_struct(const char* data, int length);
|
||
|
bool write_struct(const std::string& data);
|
||
|
|
||
|
bool write_array_header(unsigned char type, unsigned int element_count, unsigned int element_size);
|
||
|
|
||
|
bool read(int bytes, void* output);
|
||
|
bool write(int bytes, const void* data);
|
||
|
bool write(const std::string& data);
|
||
|
|
||
|
void set_use_data_types(bool use_data_types);
|
||
|
size_t size() const;
|
||
|
|
||
|
bool is_using_data_types() const;
|
||
|
|
||
|
std::string& get_buffer();
|
||
|
std::string get_remaining();
|
||
|
|
||
|
bool has_more_data() const;
|
||
|
|
||
|
private:
|
||
|
std::string buffer_;
|
||
|
size_t current_byte_ = 0;
|
||
|
bool use_data_types_ = true;
|
||
|
};
|
||
|
}
|