#include #include #include "LocalFileReader.h" #include "Exception.h" LocalFileReader LocalFileReader::instance(protocol); void LocalFileReader::open(const std::string url) { std::string path = url; if (path.starts_with(protocol)) path = path.substr(protocol.size()); this->file = new std::ifstream(path, std::ios::in); if (this->file->fail() || !this->file->is_open()) throw Exception("cannot open file://%s\n", path.c_str()); } void LocalFileReader::close() { if (this->file == nullptr) return; if (this->file->is_open()) this->file->close(); } const std::string LocalFileReader::read() { if (this->content != nullptr) return *this->content; if (this->file == nullptr) throw Exception("FileReader read after destructor\n"); if (!this->file->is_open()) throw Exception("FileReader read after close\n"); this->content = new std::string( std::istreambuf_iterator(*this->file), std::istreambuf_iterator() ); return *this->content; } LocalFileReader::~LocalFileReader() { this->close(); if (this->file != nullptr) { delete this->file; this->file = nullptr; } if (this->content != nullptr) { delete this->content; this->content = nullptr; } } LocalFileReader * LocalFileReader::clone() const { return new LocalFileReader(this); } LocalFileReader::LocalFileReader(const LocalFileReader *) : FileReader() { }