diff options
Diffstat (limited to 'src/common/io/AutoReadStream.cpp')
-rw-r--r-- | src/common/io/AutoReadStream.cpp | 32 |
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; |