From f51eb955e188858272230a990565931e7403f23b Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 24 Jun 2024 00:06:25 +0800 Subject: HALF WORK: Stream refactor. TODO: Complete refactor of BufferStream and AutoReadStream. NEED TEST: BufferStream, AutoReadStream, SubProcess. --- src/common/io/AutoReadStream.cpp | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) (limited to 'src/common/io/AutoReadStream.cpp') 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(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 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; -- cgit v1.2.3