Add io::read_full function to read whole input stream into std::vector

This commit is contained in:
Nikita Lisitsa 2022-10-07 23:37:04 +03:00
parent f617f50930
commit e7c999c3dd
2 changed files with 22 additions and 0 deletions

View file

@ -5,6 +5,8 @@
#include <cstddef> #include <cstddef>
#include <memory> #include <memory>
#include <vector>
namespace psemek::io namespace psemek::io
{ {
@ -29,4 +31,6 @@ namespace psemek::io
std::unique_ptr<ostream> std_out(); std::unique_ptr<ostream> std_out();
std::unique_ptr<ostream> std_err(); std::unique_ptr<ostream> std_err();
std::vector<char> read_full(istream && stream);
} }

View file

@ -46,4 +46,22 @@ namespace psemek::io
return std::make_unique<file_ostream>(stderr); return std::make_unique<file_ostream>(stderr);
} }
std::vector<char> read_full(istream && stream)
{
std::size_t size = 0;
std::vector<char> 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;
}
} }