/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: BlobReader.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once namespace Aurora::IO::Buffered { struct BlobReader : IStreamReader { AU_NO_COPY(BlobReader) inline BlobReader(const AuSPtr &buffer) : buffer_(buffer) {} inline BlobReader(Memory::ByteBuffer &&buffer) : buffer_(AuMakeShared(buffer)) {} inline BlobReader(const Memory::ByteBuffer &buffer) : buffer_(AuMakeShared(buffer)) {} inline BlobReader() {} inline ~BlobReader() {} inline virtual EStreamError IsOpen() override { auto pBuffer = this->buffer_; if (!pBuffer) { return EStreamError::eErrorStreamNotOpen; } if (pBuffer->HasStreamError()) { return EStreamError::eErrorByteBuffer; } return EStreamError::eErrorNone; } inline virtual EStreamError Read(const Memory::MemoryViewStreamWrite ¶meters) override { auto pBuffer = this->buffer_; if (!pBuffer) { return EStreamError::eErrorStreamNotOpen; } if (pBuffer->HasStreamError()) { return EStreamError::eErrorByteBuffer; } parameters.outVariable = pBuffer->Read(parameters.ptr, parameters.length); return parameters.outVariable == 0 ? EStreamError::eErrorEndOfStream : EStreamError::eErrorNone; } inline virtual void Close() override { AuResetMember(this->buffer_); } protected: AuSPtr buffer_; }; }