From 1c92a7c9e70a642a5932dc73d2d2c302708dba7e Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 16 Nov 2025 16:52:20 +0300 Subject: [PATCH] add memory_view_istream --- src/io/memory_istream.hpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/io/memory_istream.hpp b/src/io/memory_istream.hpp index 0b2131d6..7c0aded6 100644 --- a/src/io/memory_istream.hpp +++ b/src/io/memory_istream.hpp @@ -32,3 +32,33 @@ public: private: memory_streambuf buf; }; + +class memory_view_streambuf : public std::streambuf { +public: + explicit memory_view_streambuf(const util::Buffer& buffer) + : buffer(std::move(buffer)) { + char* base = const_cast(this->buffer.data()); + char* end = base + this->buffer.size(); + setg(base, base, end); + } + + memory_view_streambuf(const memory_view_streambuf&) = delete; + memory_view_streambuf& operator=(const memory_view_streambuf&) = delete; + +protected: + int_type underflow() override { + return traits_type::eof(); + } + +private: + const util::Buffer& buffer; +}; + +class memory_view_istream : public std::istream { +public: + explicit memory_view_istream(const util::Buffer& buffer) + : std::istream(&buf), buf(buffer) {} + +private: + memory_view_streambuf buf; +};