/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: FileWriter.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once namespace Aurora::IO::FS { class FileWriter : public IStreamWriter { public: AU_NO_COPY_NO_MOVE(FileWriter) FileWriter() {} ~FileWriter() {} template bool OpenFile(T... args) { stream_ = OpenWriteUnique(args...); return stream_ != nullptr; } virtual EStreamError Open() override { return stream_ ? EStreamError::eErrorNone : EStreamError::eErrorStreamNotOpen; } virtual EStreamError Write(const Memory::MemoryViewStreamRead & parameters) override { if (!stream_) return EStreamError::eErrorStreamNotOpen; if (!stream_->Write(parameters)) return EStreamError::eErrorStreamInterrupted; if (parameters.outVariable == 0) return EStreamError::eErrorEndOfStream; if (parameters.outVariable != parameters.length) return EStreamError::eErrorStreamInterrupted; return EStreamError::eErrorNone; } virtual void Flush() override { if (stream_) stream_->Flush(); } virtual void Close() override { stream_.reset(); } private: OpenWriteUnique_t stream_{}; }; }