Add some functionality to make filerd more usable

This commit is contained in:
rexy712 2022-07-19 16:42:47 -07:00
parent e636ba47fe
commit 43dc4b6654
2 changed files with 16 additions and 2 deletions

View File

@ -39,6 +39,7 @@ namespace rexy{
{ {
private: private:
std::FILE* m_fp = nullptr; std::FILE* m_fp = nullptr;
bool m_finished = false;
public: public:
constexpr filerd(void)noexcept = default; constexpr filerd(void)noexcept = default;
@ -65,6 +66,8 @@ namespace rexy{
const std::FILE* get(void)const noexcept; const std::FILE* get(void)const noexcept;
operator bool(void)const noexcept; operator bool(void)const noexcept;
bool eof(void)const;
std::size_t read(char* dest, std::size_t bytes)noexcept; std::size_t read(char* dest, std::size_t bytes)noexcept;
rexy::string read(std::size_t bytes)noexcept; rexy::string read(std::size_t bytes)noexcept;
rexy::string readln(std::size_t max = 0)noexcept; rexy::string readln(std::size_t max = 0)noexcept;

View File

@ -78,8 +78,16 @@ namespace rexy{
return m_fp; return m_fp;
} }
bool filerd::eof(void)const{
return m_finished;
}
std::size_t filerd::read(char* dest, std::size_t bytes)noexcept{ std::size_t filerd::read(char* dest, std::size_t bytes)noexcept{
return std::fread(dest, 1, bytes, m_fp); const auto rdcnt = std::fread(dest, 1, bytes, m_fp);
if(rdcnt < bytes){
m_finished = true;
}
return rdcnt;
} }
rexy::string filerd::read(std::size_t bytes)noexcept{ rexy::string filerd::read(std::size_t bytes)noexcept{
rexy::string ret; rexy::string ret;
@ -98,13 +106,16 @@ namespace rexy{
if(++count == max) if(++count == max)
break; break;
} }
if(c == EOF){
m_finished = true;
}
return ret; return ret;
} }
rexy::buffer<char> filerd::read_bin(std::size_t bytes) rexy::buffer<char> filerd::read_bin(std::size_t bytes)
noexcept(std::is_nothrow_constructible<rexy::buffer<char>, char*, std::size_t>::value) noexcept(std::is_nothrow_constructible<rexy::buffer<char>, char*, std::size_t>::value)
{ {
rexy::buffer<char> ret{bytes}; rexy::buffer<char> ret{bytes};
std::size_t written = read(ret.data(), bytes); const auto written = read(ret.data(), bytes);
ret.set_size(written); ret.set_size(written);
return ret; return ret;
} }