From a21be4edaa483b86872ad732fc4b93970a607952 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 12 Feb 2024 15:47:31 +0800 Subject: WORKING: add Buffer and AutoReadStream. --- src/common/Buffer.cpp | 0 src/common/CMakeLists.txt | 2 ++ src/common/io/AutoReadStream.cpp | 36 +++++++++++++++++++++++ src/common/platform/unix/PosixSpawnSubProcess.cpp | 7 +++++ 4 files changed, 45 insertions(+) create mode 100644 src/common/Buffer.cpp create mode 100644 src/common/io/AutoReadStream.cpp (limited to 'src') diff --git a/src/common/Buffer.cpp b/src/common/Buffer.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index aaff70fe..bf3156ac 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -1,5 +1,6 @@ add_library(CruBase Base.cpp + Buffer.cpp Exception.cpp Format.cpp PropertyTree.cpp @@ -7,6 +8,7 @@ add_library(CruBase StringToNumberConverter.cpp StringUtil.cpp SubProcess.cpp + io/AutoReadStream.cpp io/CFileStream.cpp io/Stream.cpp io/ProxyStream.cpp diff --git a/src/common/io/AutoReadStream.cpp b/src/common/io/AutoReadStream.cpp new file mode 100644 index 00000000..7cdc1268 --- /dev/null +++ b/src/common/io/AutoReadStream.cpp @@ -0,0 +1,36 @@ +#include "cru/common/io/AutoReadStream.h" +#include +#include "cru/common/io/Stream.h" + +namespace cru::io { + +AutoReadStream::AutoReadStream(Stream* stream, bool auto_delete, + const AutoReadStreamOptions& options) { + background_thread_ = std::thread(&AutoReadStream::BackgroundThreadRun, this); +} + +bool AutoReadStream::CanSeek() { return false; } + +Index AutoReadStream::Seek(Index offset, SeekOrigin origin) { + throw StreamOperationNotSupportedException( + u"AutoReadStream does not support seek."); +} + +bool AutoReadStream::CanWrite() { return stream_->CanWrite(); } + +Index AutoReadStream::Write(const std::byte* buffer, Index offset, Index size) { + return stream_->Write(buffer, offset, size); +} + +void AutoReadStream::Flush() { stream_->Flush(); } + +void AutoReadStream::BackgroundThreadRun() { + std::unique_lock lock(buffer_mutex_); + std::vector* buffer = nullptr; + if (!buffer_list_.empty()) { + } + stream_->Read(); +} +} + +} // namespace cru::io diff --git a/src/common/platform/unix/PosixSpawnSubProcess.cpp b/src/common/platform/unix/PosixSpawnSubProcess.cpp index a356de77..7d5ba6e4 100644 --- a/src/common/platform/unix/PosixSpawnSubProcess.cpp +++ b/src/common/platform/unix/PosixSpawnSubProcess.cpp @@ -23,4 +23,11 @@ PosixSpawnSubProcess::PosixSpawnSubProcess( PosixSpawnSubProcess::~PosixSpawnSubProcess() {} +void PosixSpawnSubProcess::PlatformCreateProcess() { + +} + +PlatformSubProcessExitResult PosixSpawnSubProcess::PlatformWaitForProcess() {} + +void PosixSpawnSubProcess::PlatformKillProcess() {} } // namespace cru::platform::unix -- cgit v1.2.3