Update filerd to use std namespace types/functions.

This commit is contained in:
rexy712 2022-06-30 12:22:09 -07:00
parent 6372262304
commit 503efeb6b5
2 changed files with 32 additions and 31 deletions

View File

@ -1,6 +1,6 @@
/** /**
This file is a part of rexy's general purpose library This file is a part of rexy's general purpose library
Copyright (C) 2020 rexy712 Copyright (C) 2020-2022 rexy712
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -30,7 +30,7 @@
#include "utility.hpp" #include "utility.hpp"
#include "rexy.hpp" #include "rexy.hpp"
#include "buffer.hpp" #include "buffer.hpp"
#include "string_view.hpp"
namespace rexy{ namespace rexy{
@ -38,7 +38,7 @@ namespace rexy{
class filerd class filerd
{ {
private: private:
FILE* m_fp = nullptr; std::FILE* m_fp = nullptr;
public: public:
constexpr filerd(void)noexcept = default; constexpr filerd(void)noexcept = default;
@ -49,20 +49,20 @@ namespace rexy{
~filerd(void)noexcept; ~filerd(void)noexcept;
filerd& operator=(const filerd&) = delete; filerd& operator=(const filerd&) = delete;
constexpr filerd& operator=(filerd&& f)noexcept{ constexpr filerd& operator=(filerd&& f)noexcept{
swap(m_fp, f.m_fp); rexy::swap(m_fp, f.m_fp);
return *this; return *this;
} }
void reset(FILE* fp = nullptr)noexcept; void reset(std::FILE* fp = nullptr)noexcept;
FILE* release(void)noexcept; std::FILE* release(void)noexcept;
std::size_t length(void)noexcept; std::size_t length(void)noexcept;
std::size_t position(void)const noexcept; std::size_t position(void)const noexcept;
void rewind(std::size_t pos = 0)noexcept; void rewind(std::size_t pos = 0)noexcept;
operator FILE*(void)noexcept; operator std::FILE*(void)noexcept;
operator const FILE*(void)const noexcept; operator const std::FILE*(void)const noexcept;
FILE* get(void)noexcept; std::FILE* get(void)noexcept;
const FILE* get(void)const noexcept; const std::FILE* get(void)const noexcept;
operator bool(void)const noexcept; operator bool(void)const noexcept;
std::size_t read(char* dest, std::size_t bytes)noexcept; std::size_t read(char* dest, std::size_t bytes)noexcept;
@ -71,7 +71,7 @@ namespace rexy{
rexy::buffer<char> read_bin(std::size_t bytes)noexcept(std::is_nothrow_constructible<rexy::buffer<char>, char*, std::size_t>::value); rexy::buffer<char> read_bin(std::size_t bytes)noexcept(std::is_nothrow_constructible<rexy::buffer<char>, char*, std::size_t>::value);
std::size_t write(const char* c, std::size_t bytes)noexcept; std::size_t write(const char* c, std::size_t bytes)noexcept;
std::size_t write(const rexy::string_base<char>& s)noexcept; std::size_t write(rexy::string_view s)noexcept;
}; };
} }

View File

@ -1,6 +1,6 @@
/** /**
This file is a part of rexy's general purpose library This file is a part of rexy's general purpose library
Copyright (C) 2020 rexy712 Copyright (C) 2020-2022 rexy712
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -21,6 +21,7 @@
//which is not standard in c++ as of c++23, though it is in c since c11. //which is not standard in c++ as of c++23, though it is in c since c11.
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
#endif #endif
#include "rexy/filerd.hpp" #include "rexy/filerd.hpp"
#include <cstdio> //fopen, fclose #include <cstdio> //fopen, fclose
@ -30,47 +31,47 @@
namespace rexy{ namespace rexy{
filerd::filerd(const char* f, const char* mode)noexcept: filerd::filerd(const char* f, const char* mode)noexcept:
m_fp(fopen(f, mode)){} m_fp(std::fopen(f, mode)){}
filerd::~filerd(void)noexcept{ filerd::~filerd(void)noexcept{
if(m_fp) if(m_fp)
fclose(m_fp); std::fclose(m_fp);
} }
void filerd::reset(FILE* fp)noexcept{ void filerd::reset(std::FILE* fp)noexcept{
if(m_fp) if(m_fp)
fclose(m_fp); std::fclose(m_fp);
m_fp = fp; m_fp = fp;
} }
FILE* filerd::release(void)noexcept{ std::FILE* filerd::release(void)noexcept{
return std::exchange(m_fp, nullptr); return std::exchange(m_fp, nullptr);
} }
std::size_t filerd::length(void)noexcept{ std::size_t filerd::length(void)noexcept{
if(!m_fp) if(!m_fp)
return 0; return 0;
std::size_t tmp, ret; std::size_t tmp, ret;
tmp = ftell(m_fp); tmp = std::ftell(m_fp);
fseek(m_fp, 0, SEEK_END); std::fseek(m_fp, 0, SEEK_END);
ret = ftell(m_fp); ret = std::ftell(m_fp);
fseek(m_fp, long(tmp), SEEK_SET); std::fseek(m_fp, long(tmp), SEEK_SET);
return ret; return ret;
} }
std::size_t filerd::position(void)const noexcept{ std::size_t filerd::position(void)const noexcept{
return ftell(m_fp); return std::ftell(m_fp);
} }
void filerd::rewind(std::size_t pos)noexcept{ void filerd::rewind(std::size_t pos)noexcept{
fseek(m_fp, long(pos), SEEK_SET); std::fseek(m_fp, long(pos), SEEK_SET);
} }
filerd::operator FILE*(void)noexcept{ filerd::operator std::FILE*(void)noexcept{
return m_fp; return m_fp;
} }
filerd::operator const FILE*(void)const noexcept{ filerd::operator const std::FILE*(void)const noexcept{
return m_fp; return m_fp;
} }
FILE* filerd::get(void)noexcept{ std::FILE* filerd::get(void)noexcept{
return m_fp; return m_fp;
} }
const FILE* filerd::get(void)const noexcept{ const std::FILE* filerd::get(void)const noexcept{
return m_fp; return m_fp;
} }
filerd::operator bool(void)const noexcept{ filerd::operator bool(void)const noexcept{
@ -78,7 +79,7 @@ namespace rexy{
} }
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 fread(dest, 1, bytes, m_fp); return std::fread(dest, 1, bytes, m_fp);
} }
rexy::string filerd::read(std::size_t bytes)noexcept{ rexy::string filerd::read(std::size_t bytes)noexcept{
rexy::string ret; rexy::string ret;
@ -91,7 +92,7 @@ namespace rexy{
rexy::string ret; rexy::string ret;
int c; int c;
std::size_t count = 0; std::size_t count = 0;
for(c = fgetc(m_fp);c != EOF && c != '\n';c = fgetc(m_fp)){ for(c = std::fgetc(m_fp);c != EOF && c != '\n';c = std::fgetc(m_fp)){
char ch = c; char ch = c;
ret.append(&ch, 1); ret.append(&ch, 1);
if(++count == max) if(++count == max)
@ -108,9 +109,9 @@ namespace rexy{
return ret; return ret;
} }
std::size_t filerd::write(const char* c, std::size_t bytes)noexcept{ std::size_t filerd::write(const char* c, std::size_t bytes)noexcept{
return fwrite(c, 1, bytes, m_fp); return std::fwrite(c, 1, bytes, m_fp);
} }
std::size_t filerd::write(const rexy::string_base<char>& c)noexcept{ std::size_t filerd::write(rexy::string_view c)noexcept{
return write(c.data(), c.length()); return write(c.data(), c.length());
} }