Add io::istream::finished() method

This commit is contained in:
Nikita Lisitsa 2023-12-03 20:31:48 +03:00
parent 8038da6987
commit a8fc4ea741
4 changed files with 14 additions and 0 deletions

View file

@ -40,6 +40,8 @@ namespace psemek::io
std::size_t read(char * p, std::size_t size) override;
bool finished() const override;
~file_istream() override
{
reset();

View file

@ -55,6 +55,11 @@ namespace psemek::io
std::size_t read(char * p, std::size_t size) override;
bool finished() const override
{
return begin_ == end_;
}
void advance(std::size_t n)
{
if (end_ - begin_ < n)

View file

@ -13,6 +13,7 @@ namespace psemek::io
{
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 bool finished() const = 0;
virtual ~istream() {}
};

View file

@ -37,6 +37,12 @@ namespace psemek::io
return std::fread(p, 1, size, file_);
}
bool file_istream::finished() const
{
if (!file_) throw null_istream{};
return std::feof(file_) != 0;
}
static char const * fopen_write_mode(unsigned flags)
{
switch (flags)