#ifndef BUFFER_HH #define BUFFER_HH #include #include class Buffer { public: virtual ~Buffer() = default; virtual void const* rptr(size_t& avail, size_t need = 1) = 0; virtual void consume(size_t size) = 0; virtual void* wptr(size_t& avail, size_t need = 1) = 0; virtual void commit(size_t size) = 0; [[nodiscard]] virtual bool full() const = 0; [[nodiscard]] virtual bool empty() const = 0; [[nodiscard]] static std::unique_ptr fixed(size_t size); [[nodiscard]] static std::unique_ptr dynamic(size_t start_size, size_t max_size); protected: Buffer() = default; Buffer(Buffer const&) = delete; Buffer& operator=(Buffer const&) = delete; }; #endif // BUFFER_HH