/*** 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 : public 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 Open() override { if (!buffer_) return EStreamError::eErrorStreamNotOpen; return EStreamError::eErrorNone; } inline virtual EStreamError Read(const Memory::MemoryViewStreamWrite ¶meters) override { if (!buffer_) return EStreamError::eErrorStreamNotOpen; parameters.outVariable = buffer_->Read(parameters.ptr, parameters.length); return parameters.outVariable == 0 ? EStreamError::eErrorEndOfStream : EStreamError::eErrorNone; } inline virtual void Close() override { if (!buffer_) return; buffer_->clear(); } private: AuSPtr buffer_; AuUInt32 offset_ {}; }; }