10 std::streambuf &streambuf,
28 return streambuf.pubseekoff
37 void Stream_File::seek
41 std::ios_base::openmode which
46 const auto pos = streambuf.pubseekoff(offset, std::ios_base::beg, which);
47 if (int64_t(pos) == offset)
51 throw Exception(
"seek error");
58 seek(offset, std::ios_base::in);
59 const std::streamsize n = streambuf.sgetn(data, std::streamsize(size));
67 seek(offset, std::ios_base::out);
71 while (written < size)
73 const std::streamsize n = streambuf.sputn
76 std::streamsize(size - written)
80 throw Exception(
"Could not write to stream");
85 if (streambuf.pubsync() < 0)
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)