diff options
author | crupest <crupest@outlook.com> | 2024-06-10 13:40:32 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2024-06-10 13:40:32 +0800 |
commit | 633c77d7cd2dd5cd22018aca17da1490e34d94ec (patch) | |
tree | ac007e9c84dbf662662f8b2ff06c2321945d2c6a /src/common/io | |
parent | 4725b4bc48722356fea4570ed7770137a0999491 (diff) | |
download | cru-633c77d7cd2dd5cd22018aca17da1490e34d94ec.tar.gz cru-633c77d7cd2dd5cd22018aca17da1490e34d94ec.tar.bz2 cru-633c77d7cd2dd5cd22018aca17da1490e34d94ec.zip |
test: develop SubProcess test, fix various error.
NEED TEST: BufferStream, AutoReadStream, SubProcess.
Diffstat (limited to 'src/common/io')
-rw-r--r-- | src/common/io/Stream.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/common/io/Stream.cpp b/src/common/io/Stream.cpp index 97669944..b2a67a18 100644 --- a/src/common/io/Stream.cpp +++ b/src/common/io/Stream.cpp @@ -58,17 +58,23 @@ Index Stream::Write(const char* buffer, Index size) { return Write(reinterpret_cast<const std::byte*>(buffer), size); } -std::vector<std::byte> Stream::ReadAll() { - std::vector<std::byte> buffer; - buffer.resize(GetSize()); - Read(buffer.data(), 0, buffer.size()); +Buffer Stream::ReadToEnd(Index grow_size) { + Buffer buffer(grow_size); + while (true) { + auto read = Read(buffer.GetUsedEndPtr(), buffer.GetBackFree()); + if (read == 0) { + break; + } + if (buffer.IsUsedReachEnd()) { + buffer.ResizeBuffer(buffer.GetBufferSize() + grow_size, true); + } + } return buffer; } -String Stream::ReadAllAsString() { - auto buffer = ReadAll(); - return String::FromUtf8(reinterpret_cast<const char*>(buffer.data()), - buffer.size()); +String Stream::ReadToEndAsUtf8String() { + auto buffer = ReadToEnd(); + return String::FromUtf8(buffer); } void Stream::Flush() {} |