diff options
| author | untodesu <kirill@untode.su> | 2025-09-11 13:10:52 +0500 |
|---|---|---|
| committer | untodesu <kirill@untode.su> | 2025-09-11 13:10:52 +0500 |
| commit | 96bd73ae020ecca1f94698744c77498a89ad19f7 (patch) | |
| tree | dc0ee946138141e7a0327a7d3c566f4a37adff3f /core/io/buffer.hh | |
| parent | 6dc5194895b6bd61d19bf5c95021471784084325 (diff) | |
| download | voxelius-96bd73ae020ecca1f94698744c77498a89ad19f7.tar.bz2 voxelius-96bd73ae020ecca1f94698744c77498a89ad19f7.zip | |
Graft build scripts and buffer code from QFengine
Diffstat (limited to 'core/io/buffer.hh')
| -rw-r--r-- | core/io/buffer.hh | 221 |
1 files changed, 27 insertions, 194 deletions
diff --git a/core/io/buffer.hh b/core/io/buffer.hh index 205381f..c301204 100644 --- a/core/io/buffer.hh +++ b/core/io/buffer.hh @@ -1,13 +1,12 @@ #ifndef CORE_IO_BUFFER_HH #define CORE_IO_BUFFER_HH 1 -#include "core/math/floathacks.hh" - namespace io { class ReadBuffer final { public: ReadBuffer(void) = default; + explicit ReadBuffer(const ReadBuffer& other); explicit ReadBuffer(const void* data, std::size_t size); explicit ReadBuffer(const ENetPacket* packet); explicit ReadBuffer(PHYSFS_File* file); @@ -20,28 +19,16 @@ public: void reset(const ENetPacket* packet); void reset(PHYSFS_File* file); - float read_FP32(void); - std::uint8_t read_UI8(void); - std::uint16_t read_UI16(void); - std::uint32_t read_UI32(void); - std::uint64_t read_UI64(void); - std::string read_string(void); + constexpr void rewind(void); + constexpr bool is_ended(void) const; + + void read(void* buffer, std::size_t size); - inline std::int8_t read_I8(void); - inline std::int16_t read_I16(void); - inline std::int32_t read_I32(void); - inline std::int64_t read_I64(void); + template<typename T> + T read(void); - inline ReadBuffer& operator>>(float& value); - inline ReadBuffer& operator>>(std::int8_t& value); - inline ReadBuffer& operator>>(std::int16_t& value); - inline ReadBuffer& operator>>(std::int32_t& value); - inline ReadBuffer& operator>>(std::int64_t& value); - inline ReadBuffer& operator>>(std::uint8_t& value); - inline ReadBuffer& operator>>(std::uint16_t& value); - inline ReadBuffer& operator>>(std::uint32_t& value); - inline ReadBuffer& operator>>(std::uint64_t& value); - inline ReadBuffer& operator>>(std::string& value); + template<typename T> + ReadBuffer& operator>>(T& value); private: std::vector<std::byte> m_vector; @@ -54,6 +41,7 @@ namespace io class WriteBuffer final { public: WriteBuffer(void) = default; + explicit WriteBuffer(const WriteBuffer& other); virtual ~WriteBuffer(void) = default; std::size_t size(void) const; @@ -61,30 +49,16 @@ public: void reset(void); - void write_FP32(float value); - void write_UI8(std::uint8_t value); - void write_UI16(std::uint16_t value); - void write_UI32(std::uint32_t value); - void write_UI64(std::uint64_t value); - void write_string(const std::string& value); + void write(const WriteBuffer& other); + void write(const void* data, std::size_t size); - inline void write_I8(std::int8_t value); - inline void write_I16(std::int16_t value); - inline void write_I32(std::int32_t value); - inline void write_I64(std::int64_t value); + template<typename T> + void write(const T value); - inline WriteBuffer& operator<<(float value); - inline WriteBuffer& operator<<(std::int8_t value); - inline WriteBuffer& operator<<(std::int16_t value); - inline WriteBuffer& operator<<(std::int32_t value); - inline WriteBuffer& operator<<(std::int64_t value); - inline WriteBuffer& operator<<(std::uint8_t value); - inline WriteBuffer& operator<<(std::uint16_t value); - inline WriteBuffer& operator<<(std::uint32_t value); - inline WriteBuffer& operator<<(std::uint64_t value); - inline WriteBuffer& operator<<(const std::string& value); + template<typename T> + WriteBuffer& operator<<(const T value); - PHYSFS_File* to_file(const char* path, bool append = false) const; + PHYSFS_File* to_file(const std::string& path, bool append = false) const; ENetPacket* to_packet(enet_uint32 flags = ENET_PACKET_FLAG_RELIABLE) const; private: @@ -92,168 +66,27 @@ private: }; } // namespace io -inline std::int8_t io::ReadBuffer::read_I8(void) -{ - return static_cast<std::int8_t>(read_UI8()); -} - -inline std::int16_t io::ReadBuffer::read_I16(void) -{ - return static_cast<std::int16_t>(read_UI16()); -} - -inline std::int32_t io::ReadBuffer::read_I32(void) -{ - return static_cast<std::int32_t>(read_UI32()); -} - -inline std::int64_t io::ReadBuffer::read_I64(void) -{ - return static_cast<std::int64_t>(read_UI64()); -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(float& value) -{ - value = read_FP32(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::int8_t& value) -{ - value = read_I8(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::int16_t& value) -{ - value = read_I16(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::int32_t& value) -{ - value = read_I32(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::int64_t& value) -{ - value = read_I64(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::uint8_t& value) -{ - value = read_UI8(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::uint16_t& value) -{ - value = read_UI16(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::uint32_t& value) +constexpr void io::ReadBuffer::rewind(void) { - value = read_UI32(); - return *this; -} - -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::uint64_t& value) -{ - value = read_UI64(); - return *this; + m_position = 0; } -inline io::ReadBuffer& io::ReadBuffer::operator>>(std::string& value) +constexpr bool io::ReadBuffer::is_ended(void) const { - value = read_string(); - return *this; -} - -inline void io::WriteBuffer::write_FP32(float value) -{ - write_UI32(math::float_to_uint32(value)); -} - -inline void io::WriteBuffer::write_I8(std::int8_t value) -{ - write_UI8(static_cast<std::uint8_t>(value)); -} - -inline void io::WriteBuffer::write_I16(std::int16_t value) -{ - write_UI16(static_cast<std::uint16_t>(value)); -} - -inline void io::WriteBuffer::write_I32(std::int32_t value) -{ - write_UI32(static_cast<std::uint32_t>(value)); -} - -inline void io::WriteBuffer::write_I64(std::int64_t value) -{ - write_UI64(static_cast<std::uint64_t>(value)); -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(float value) -{ - write_FP32(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::int8_t value) -{ - write_I8(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::int16_t value) -{ - write_I16(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::int32_t value) -{ - write_I32(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::int64_t value) -{ - write_I64(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::uint8_t value) -{ - write_UI8(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::uint16_t value) -{ - write_UI16(value); - return *this; -} - -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::uint32_t value) -{ - write_UI32(value); - return *this; + return m_position >= m_vector.size(); } -inline io::WriteBuffer& io::WriteBuffer::operator<<(std::uint64_t value) +template<typename T> +io::ReadBuffer& io::ReadBuffer::operator>>(T& value) { - write_UI64(value); + value = read<T>(); return *this; } -inline io::WriteBuffer& io::WriteBuffer::operator<<(const std::string& value) +template<typename T> +io::WriteBuffer& io::WriteBuffer::operator<<(const T value) { - write_string(value); + write<T>(value); return *this; } |
