/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: FileReader.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once namespace Aurora::IO::FS { struct FileReader : public IStreamReader { AU_NO_COPY_NO_MOVE(FileReader) inline FileReader() {} inline ~FileReader() {} template inline bool OpenFile(T... args) { stream_ = OpenReadUnique(args...); return stream_ != nullptr; } inline virtual EStreamError Open() override { return stream_ ? EStreamError::eErrorNone : EStreamError::eErrorStreamNotOpen; } inline virtual EStreamError Read(const Memory::MemoryViewStreamWrite ¶mters) override { if (!stream_) return EStreamError::eErrorStreamNotOpen; if (!stream_->Read(paramters)) return EStreamError::eErrorStreamInterrupted; if (paramters.outVariable == 0) return EStreamError::eErrorEndOfStream; return EStreamError::eErrorNone; } inline virtual void Close() override { stream_.reset(); } private: OpenReadUnique_t stream_{}; }; }