diff --git a/libs/io/include/psemek/io/stream.hpp b/libs/io/include/psemek/io/stream.hpp index 11330526..36128b5c 100644 --- a/libs/io/include/psemek/io/stream.hpp +++ b/libs/io/include/psemek/io/stream.hpp @@ -5,6 +5,8 @@ #include #include +#include + namespace psemek::io { @@ -29,4 +31,6 @@ namespace psemek::io std::unique_ptr std_out(); std::unique_ptr std_err(); + std::vector read_full(istream && stream); + } diff --git a/libs/io/source/stream.cpp b/libs/io/source/stream.cpp index 3def2dbb..11247f6e 100644 --- a/libs/io/source/stream.cpp +++ b/libs/io/source/stream.cpp @@ -46,4 +46,22 @@ namespace psemek::io return std::make_unique(stderr); } + std::vector read_full(istream && stream) + { + std::size_t size = 0; + std::vector result(1024); + while (true) + { + if (result.size() == size) + result.resize(result.size() * 2); + + std::size_t count = stream.read(result.data() + size, result.size() - size); + if (count == 0) + break; + size += count; + } + result.resize(size); + return result; + } + }