/** This file is a part of rexy's general purpose library Copyright (C) 2020 rexy712 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ #ifndef REXY_FILERD_HPP #define REXY_FILERD_HPP #include //FILE #include //size_t #include #include namespace rexy{ //RAII wrapper for FILE* class filerd { private: FILE* m_fp = nullptr; public: filerd(void) = default; filerd(const char* f, const char* mode = "r"); filerd(const filerd&) = delete; filerd(filerd&& f); ~filerd(void); filerd& operator=(const filerd&) = delete; filerd& operator=(filerd&& f); void reset(FILE* fp = nullptr); FILE* release(void); size_t length(void); size_t position(void)const; void rewind(size_t pos = 0); operator FILE*(void); operator const FILE*(void)const; FILE* get(void); const FILE* get(void)const; operator bool(void)const; size_t read(char* dest, size_t bytes); rexy::string read(size_t bytes); rexy::string readln(size_t max = 0); rexy::binary read_bin(size_t bytes); size_t write(const char* c, size_t bytes); size_t write(const rexy::string_base&); }; } #endif