aboutsummaryrefslogtreecommitdiff
path: root/src/base/io/AutoReadStream.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2026-03-07 20:42:37 +0800
committerYuqian Yang <crupest@crupest.life>2026-03-07 20:42:37 +0800
commit38756822825e20eca3b9e01b735946175223d692 (patch)
treefc2a495bfc0e082d5ed9a1642278ae6467fe2742 /src/base/io/AutoReadStream.cpp
parent924f4b472712d0cfc55b81dcb3eaed3f8a478288 (diff)
downloadcru-38756822825e20eca3b9e01b735946175223d692.tar.gz
cru-38756822825e20eca3b9e01b735946175223d692.tar.bz2
cru-38756822825e20eca3b9e01b735946175223d692.zip
Refactor stream.
Diffstat (limited to 'src/base/io/AutoReadStream.cpp')
-rw-r--r--src/base/io/AutoReadStream.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/base/io/AutoReadStream.cpp b/src/base/io/AutoReadStream.cpp
index 0c035648..61cc9f26 100644
--- a/src/base/io/AutoReadStream.cpp
+++ b/src/base/io/AutoReadStream.cpp
@@ -8,7 +8,7 @@ namespace cru::io {
AutoReadStream::AutoReadStream(Stream* stream, bool auto_close,
bool auto_delete,
const AutoReadStreamOptions& options)
- : Stream(false, true, stream->CanSeek()),
+ : Stream(false, true, std::nullopt),
auto_close_(auto_close),
auto_delete_(auto_delete) {
auto buffer_stream_options = options.GetBufferStreamOptions();
@@ -19,10 +19,15 @@ AutoReadStream::AutoReadStream(Stream* stream, bool auto_close,
}
AutoReadStream::~AutoReadStream() {
- DoClose();
+ if (auto_delete_) {
+ delete stream_;
+ }
+ buffer_stream_->Close();
background_thread_.join();
}
+bool AutoReadStream::DoCanWrite() { return stream_->CanWrite(); }
+
Index AutoReadStream::DoRead(std::byte* buffer, Index offset, Index size) {
return buffer_stream_->Read(buffer, offset, size);
}
@@ -35,14 +40,9 @@ Index AutoReadStream::DoWrite(const std::byte* buffer, Index offset,
void AutoReadStream::DoFlush() { stream_->Flush(); }
void AutoReadStream::DoClose() {
- CRU_STREAM_BEGIN_CLOSE
if (auto_close_) {
stream_->Close();
}
- if (auto_delete_) {
- delete stream_;
- stream_ = nullptr;
- }
buffer_stream_->Close();
}
@@ -51,14 +51,13 @@ void AutoReadStream::BackgroundThreadRun() {
while (true) {
try {
auto read = stream_->Read(buffer.data(), buffer.size());
- if (read == 0) {
- buffer_stream_->SetEof();
+ if (read == kEOF) {
+ buffer_stream_->WriteEof();
break;
} else {
buffer_stream_->Write(buffer.data(), read);
}
- } catch (const StreamClosedException& exception) {
- buffer_stream_->Close();
+ } catch (const StreamException&) {
break;
}
}