#pragma once #include #include #include namespace tinyrpc { class TcpBuffer { public: TcpBuffer(std::size_t size) : m_buffer(size) { } ~TcpBuffer() { } std::size_t getReadable() const { return m_write_index - m_read_index; } std::size_t getWriteable() const { return m_buffer.size() - m_write_index; } void* getWriteAddress() { return m_buffer.data() + m_write_index; } void* getReadAddress() { return m_buffer.data() + m_read_index; } void adjustBuffer(); bool readOffset(std::size_t offset) ; bool writeOffset(std::size_t offset) ; void clear(); int readFromBuffer(void* buf, std::size_t size); int writeToBuffer(const void* buf, std::size_t size); void resize(std::size_t size); private: std::size_t m_read_index{0}; std::size_t m_write_index{0}; std::vector m_buffer{}; }; }