aboutsummaryrefslogtreecommitdiff
path: root/src/common/io/Stream.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-06-10 13:40:32 +0800
committercrupest <crupest@outlook.com>2024-06-10 13:40:32 +0800
commit633c77d7cd2dd5cd22018aca17da1490e34d94ec (patch)
treeac007e9c84dbf662662f8b2ff06c2321945d2c6a /src/common/io/Stream.cpp
parent4725b4bc48722356fea4570ed7770137a0999491 (diff)
downloadcru-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/Stream.cpp')
-rw-r--r--src/common/io/Stream.cpp22
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() {}