#include 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 std_in() { return std::make_unique(stdin); } std::unique_ptr std_out() { return std::make_unique(stdout); } std::unique_ptr std_err() { return std::make_unique(stderr); } }