Add some functionality to make filerd more usable
This commit is contained in:
parent
e636ba47fe
commit
43dc4b6654
@ -39,6 +39,7 @@ namespace rexy{
|
||||
{
|
||||
private:
|
||||
std::FILE* m_fp = nullptr;
|
||||
bool m_finished = false;
|
||||
|
||||
public:
|
||||
constexpr filerd(void)noexcept = default;
|
||||
@ -65,6 +66,8 @@ namespace rexy{
|
||||
const std::FILE* get(void)const noexcept;
|
||||
operator bool(void)const noexcept;
|
||||
|
||||
bool eof(void)const;
|
||||
|
||||
std::size_t read(char* dest, std::size_t bytes)noexcept;
|
||||
rexy::string read(std::size_t bytes)noexcept;
|
||||
rexy::string readln(std::size_t max = 0)noexcept;
|
||||
|
||||
@ -78,8 +78,16 @@ namespace rexy{
|
||||
return m_fp;
|
||||
}
|
||||
|
||||
bool filerd::eof(void)const{
|
||||
return m_finished;
|
||||
}
|
||||
|
||||
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 ret;
|
||||
@ -98,13 +106,16 @@ namespace rexy{
|
||||
if(++count == max)
|
||||
break;
|
||||
}
|
||||
if(c == EOF){
|
||||
m_finished = true;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
rexy::buffer<char> filerd::read_bin(std::size_t bytes)
|
||||
noexcept(std::is_nothrow_constructible<rexy::buffer<char>, char*, std::size_t>::value)
|
||||
{
|
||||
rexy::buffer<char> ret{bytes};
|
||||
std::size_t written = read(ret.data(), bytes);
|
||||
const auto written = read(ret.data(), bytes);
|
||||
ret.set_size(written);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user