/** This file is a part of rexy's matrix client Copyright (C) 2019 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 RAII_FILERD_HPP #define RAII_FILERD_HPP #include //FILE #include //size_t #include "raii/string.hpp" namespace raii{ //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); raii::string read(size_t bytes); size_t write(const char* c, size_t bytes); size_t write(const raii::string_base&); }; } #endif