diff options
| author | Per Larsson <[email protected]> | 2022-02-16 12:32:27 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2022-02-16 12:32:27 +0100 |
| commit | 87bb9700722e8319aa58484bba03e398dedede87 (patch) | |
| tree | 1a82ce932f0a729f48bf8472d5f88fa897679a8f /zencore | |
| parent | Renamed asio web socket impl. (diff) | |
| download | zen-87bb9700722e8319aa58484bba03e398dedede87.tar.xz zen-87bb9700722e8319aa58484bba03e398dedede87.zip | |
Added websocket message parser.
Diffstat (limited to 'zencore')
| -rw-r--r-- | zencore/include/zencore/stream.h | 30 | ||||
| -rw-r--r-- | zencore/stream.cpp | 24 |
2 files changed, 54 insertions, 0 deletions
diff --git a/zencore/include/zencore/stream.h b/zencore/include/zencore/stream.h index 9d1a7628c..4c8047bb4 100644 --- a/zencore/include/zencore/stream.h +++ b/zencore/include/zencore/stream.h @@ -49,6 +49,36 @@ MakeMemoryView(const BinaryWriter& Stream) } /** + * Non thread-safe stream writer + */ + +class SimpleBinaryWriter +{ + static constexpr size_t DefaultBlockSize = 64; + +public: + SimpleBinaryWriter(uint64_t BlockSize = DefaultBlockSize) : m_BlockSize(BlockSize), m_Offset{0} {} + ~SimpleBinaryWriter() = default; + + void Write(const void* Data, size_t Size); + void Clear(); + + inline uint64_t CurrentOffset() const { return m_Offset; } + + inline const uint8_t* Data() const { return m_Buffer.data(); } + inline const uint8_t* GetData() const { return m_Buffer.data(); } + inline uint64_t Size() const { return m_Buffer.size(); } + inline uint64_t GetSize() const { return m_Buffer.size(); } + + MemoryView GetView() const { return MemoryView(m_Buffer.data(), m_Offset); } + +private: + std::vector<uint8_t> m_Buffer; + size_t m_BlockSize; + size_t m_Offset; +}; + +/** * Binary stream reader */ diff --git a/zencore/stream.cpp b/zencore/stream.cpp index aa9705764..361858b66 100644 --- a/zencore/stream.cpp +++ b/zencore/stream.cpp @@ -25,6 +25,30 @@ BinaryWriter::Write(const void* data, size_t ByteCount, uint64_t Offset) memcpy(m_Buffer.data() + Offset, data, ByteCount); } +void +SimpleBinaryWriter::Write(const void* Data, size_t Size) +{ + const size_t NeededSize = m_Offset + Size; + + if (NeededSize > m_Buffer.size()) + { + const size_t NewCapacity = RoundUp(NeededSize, m_BlockSize); + + m_Buffer.resize(NewCapacity); + } + + memcpy(m_Buffer.data() + m_Offset, Data, Size); + + m_Offset += Size; +} + +void +SimpleBinaryWriter::Clear() +{ + m_Buffer.clear(); + m_Offset = 0; +} + ////////////////////////////////////////////////////////////////////////// // // Testing related code follows... |