add memory_view_istream

This commit is contained in:
MihailRis 2025-11-16 16:52:20 +03:00
parent 5b26c7d85a
commit 1c92a7c9e7

View File

@ -32,3 +32,33 @@ public:
private:
memory_streambuf buf;
};
class memory_view_streambuf : public std::streambuf {
public:
explicit memory_view_streambuf(const util::Buffer<char>& buffer)
: buffer(std::move(buffer)) {
char* base = const_cast<char*>(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<char>& buffer;
};
class memory_view_istream : public std::istream {
public:
explicit memory_view_istream(const util::Buffer<char>& buffer)
: std::istream(&buf), buf(buffer) {}
private:
memory_view_streambuf buf;
};