add memory_view_istream
This commit is contained in:
parent
5b26c7d85a
commit
1c92a7c9e7
@ -32,3 +32,33 @@ public:
|
|||||||
private:
|
private:
|
||||||
memory_streambuf buf;
|
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;
|
||||||
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user