From 79a8749249c61799ff894695431376f997c25781 Mon Sep 17 00:00:00 2001 From: Jan Sucan Date: Wed, 22 Jan 2025 15:01:36 +0100 Subject: Move multi-buffering to BufferedStream::Reader --- src/buffered_stream.h | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/buffered_stream.h') diff --git a/src/buffered_stream.h b/src/buffered_stream.h index 4b05a64..360dd60 100644 --- a/src/buffered_stream.h +++ b/src/buffered_stream.h @@ -31,6 +31,7 @@ #include #include #include +#include namespace BufferedStream { @@ -41,25 +42,32 @@ class Error : public DiffddError explicit Error(const std::string &message) : DiffddError(message) {} }; +struct DataPart { + size_t size; + std::shared_ptr data; +}; + class Reader { public: - Reader(std::istream &istream, size_t buffer_capacity); + Reader(std::istream &istream, size_t buffer_capacity, size_t buffer_count); virtual ~Reader() = default; - size_t read(char *data, size_t data_size); - size_t tryRead(size_t data_size, char **return_data); + size_t read(size_t data_size, char *dest_buf); + DataPart readMultipart(size_t data_size); private: + const size_t m_buffer_count; + const size_t m_buffer_capacity; std::istream &m_istream; - std::unique_ptr m_buffer; + std::vector> m_buffers; + size_t m_buffer_index; size_t m_buffer_offset; size_t m_buffer_size; - const size_t m_buffer_capacity; - size_t read_buffer(size_t data_size, char **return_data); - void refill_buffer(); - size_t read_stream(char *data, size_t data_size); + DataPart read_current_buffer(size_t data_size); + void refill_next_buffer(); + size_t read_stream(std::shared_ptr data, size_t data_size); }; class Writer -- cgit v1.2.3