/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: BlobWriter.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once namespace Aurora::IO::Buffered { struct BlobWriter : IStreamWriter { AU_COPY_MOVE(BlobWriter) inline BlobWriter(const AuSPtr &buffer) : pBuffer_(buffer) {} inline BlobWriter() : pBuffer_(AuMakeShared()) {} inline ~BlobWriter() {} inline virtual EStreamError IsOpen() override { auto pBuffer = this->pBuffer_; if (!pBuffer) { return EStreamError::eErrorStreamNotOpen; } if (pBuffer->HasStreamError()) { return EStreamError::eErrorByteBuffer; } return EStreamError::eErrorNone; } inline virtual EStreamError Write(const Memory::MemoryViewStreamRead ¶meters) override { auto pBuffer = this->pBuffer_; if (!pBuffer) { return EStreamError::eErrorStreamNotOpen; } if (pBuffer->HasStreamError()) { return EStreamError::eErrorByteBuffer; } parameters.outVariable = pBuffer->Write(parameters.ptr, parameters.length); return EStreamError::eErrorNone; } inline virtual void Flush() override { } inline virtual void Close() override { AuResetMember(this->pBuffer_); } inline AuSPtr GetBuffer() { return this->pBuffer_; } private: AuSPtr pBuffer_; }; }