/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: IStreamReader.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once namespace Aurora::IO { class IStreamReader { public: virtual EStreamError Open() = 0; virtual EStreamError Read(const Memory::MemoryViewStreamWrite ¶mters) = 0; virtual void Close() = 0; EStreamError ReadAll(Memory::ByteBuffer &buffer) { static const int kBufferSize = 2048; AuUInt len; EStreamError ret; AuUInt8 temp[kBufferSize]; len = kBufferSize; ret = EStreamError::eErrorEndOfStream; buffer = Memory::NewResizableBuffer(); while ((ret = Read(Memory::MemoryViewStreamWrite(temp, len))) == EStreamError::eErrorNone) { if (len == 0) { break; } buffer.Write(temp, len); if (len != kBufferSize) { break; } } if (ret == EStreamError::eErrorEndOfStream) { return EStreamError::eErrorNone; } return ret; } }; }