Add io::read_full function to read whole input stream into std::vector
This commit is contained in:
parent
f617f50930
commit
e7c999c3dd
2 changed files with 22 additions and 0 deletions
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue