Add some functionality to make filerd more usable
This commit is contained in:
parent
e636ba47fe
commit
43dc4b6654
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user