aboutsummaryrefslogtreecommitdiff
path: root/src/common/io/AutoReadStream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/io/AutoReadStream.cpp')
-rw-r--r--src/common/io/AutoReadStream.cpp32
1 files changed, 8 insertions, 24 deletions
diff --git a/src/common/io/AutoReadStream.cpp b/src/common/io/AutoReadStream.cpp
index e7c851cf..18bc18da 100644
--- a/src/common/io/AutoReadStream.cpp
+++ b/src/common/io/AutoReadStream.cpp
@@ -6,14 +6,13 @@
namespace cru::io {
AutoReadStream::AutoReadStream(Stream* stream, bool auto_delete,
- const AutoReadStreamOptions& options) {
+ const AutoReadStreamOptions& options)
+ : Stream(false, true, stream->CanSeek()) {
auto buffer_stream_options = options.GetBufferStreamOptions();
stream_ = stream;
size_per_read_ = buffer_stream_options.GetBlockSizeOrDefault();
buffer_stream_ = std::make_unique<BufferStream>(buffer_stream_options);
- auto background_thread =
- std::thread(&AutoReadStream::BackgroundThreadRun, this);
- background_thread.detach();
+ background_thread_ = std::thread(&AutoReadStream::BackgroundThreadRun, this);
}
AutoReadStream::~AutoReadStream() {
@@ -22,40 +21,25 @@ AutoReadStream::~AutoReadStream() {
}
}
-bool AutoReadStream::CanSeek() { return false; }
-
-Index AutoReadStream::Seek(Index offset, SeekOrigin origin) {
- throw StreamOperationNotSupportedException(
- u"AutoReadStream does not support seek.");
-}
-
-bool AutoReadStream::CanRead() { return true; }
-
-Index AutoReadStream::Read(std::byte* buffer, Index offset, Index size) {
+Index AutoReadStream::DoRead(std::byte* buffer, Index offset, Index size) {
std::unique_lock lock(buffer_stream_mutex_);
return buffer_stream_->Read(buffer, offset, size);
}
-bool AutoReadStream::CanWrite() { return stream_->CanWrite(); }
-
-Index AutoReadStream::Write(const std::byte* buffer, Index offset, Index size) {
+Index AutoReadStream::DoWrite(const std::byte* buffer, Index offset,
+ Index size) {
return stream_->Write(buffer, offset, size);
}
-void AutoReadStream::Flush() { stream_->Flush(); }
+void AutoReadStream::DoFlush() { stream_->Flush(); }
-void AutoReadStream::Close() { stream_->Close(); }
+void AutoReadStream::DoClose() {}
void AutoReadStream::BackgroundThreadRun() {
- auto resolver = CreateResolver();
std::vector<std::byte> buffer(size_per_read_);
while (true) {
try {
auto read = stream_->Read(buffer.data(), buffer.size());
- auto self = resolver.Resolve();
- if (!self) {
- break;
- }
if (read == 0) {
buffer_stream_->SetEof();
break;