Add io stream read/write_all
This commit is contained in:
parent
142d15fdcb
commit
ef5b8479ea
2 changed files with 30 additions and 1 deletions
|
|
@ -11,6 +11,7 @@ namespace psemek::io
|
||||||
struct istream
|
struct istream
|
||||||
{
|
{
|
||||||
virtual std::size_t read(char * p, std::size_t size) = 0;
|
virtual std::size_t read(char * p, std::size_t size) = 0;
|
||||||
|
virtual std::size_t read_all(char * p, std::size_t size);
|
||||||
|
|
||||||
virtual ~istream() {}
|
virtual ~istream() {}
|
||||||
};
|
};
|
||||||
|
|
@ -18,6 +19,7 @@ namespace psemek::io
|
||||||
struct ostream
|
struct ostream
|
||||||
{
|
{
|
||||||
virtual std::size_t write(char const * p, std::size_t size) = 0;
|
virtual std::size_t write(char const * p, std::size_t size) = 0;
|
||||||
|
virtual std::size_t write_all(char const * p, std::size_t size);
|
||||||
virtual void flush() {}
|
virtual void flush() {}
|
||||||
|
|
||||||
virtual ~ostream() {}
|
virtual ~ostream() {}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,34 @@
|
||||||
namespace psemek::io
|
namespace psemek::io
|
||||||
{
|
{
|
||||||
|
|
||||||
|
std::size_t istream::read_all(char * p, std::size_t size)
|
||||||
|
{
|
||||||
|
auto left = size;
|
||||||
|
while (left > 0)
|
||||||
|
{
|
||||||
|
auto s = read(p, left);
|
||||||
|
if (s == 0)
|
||||||
|
throw istream_end{};
|
||||||
|
p += s;
|
||||||
|
left -= s;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t ostream::write_all(char const * p, std::size_t size)
|
||||||
|
{
|
||||||
|
auto left = size;
|
||||||
|
while (left > 0)
|
||||||
|
{
|
||||||
|
auto s = write(p, left);
|
||||||
|
if (s == 0)
|
||||||
|
throw ostream_end{};
|
||||||
|
p += s;
|
||||||
|
left -= s;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<istream> std_in()
|
std::unique_ptr<istream> std_in()
|
||||||
{
|
{
|
||||||
return std::make_unique<file_istream>(stdin);
|
return std::make_unique<file_istream>(stdin);
|
||||||
|
|
@ -18,5 +46,4 @@ namespace psemek::io
|
||||||
return std::make_unique<file_ostream>(stderr);
|
return std::make_unique<file_ostream>(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue