10 std::streambuf &streambuf,
22 return streambuf.pubseekoff
31 void Stream_File::seek
35 std::ios_base::openmode which
40 const auto pos = streambuf.pubseekoff(offset, std::ios_base::beg, which);
41 if (int64_t(pos) == offset)
45 throw Exception(
"seek error");
52 seek(offset, std::ios_base::in);
53 const std::streamsize n = streambuf.sgetn(data, std::streamsize(size));
61 seek(offset, std::ios_base::out);
65 while (written < size)
67 const std::streamsize n = streambuf.sputn
70 std::streamsize(size - written)
74 throw Exception(
"Could not write to stream");
79 if (streambuf.pubsync() < 0)
Abstract_File(Open_Mode mode)
int64_t get_size() const override
Get the size of the file, or -1 if it is unknown.
size_t pread(char *data, size_t size, int64_t offset) const override
Read a range of bytes.
void pwrite(const char *data, size_t size, int64_t offset) override
Write a range of bytes. Extend file size if necessary.
Stream_File(std::streambuf &streambuf, Open_Mode mode)