/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: IStreamWriter.inl Date: 2022-5-28 Author: Reece ***/ #pragma once namespace Aurora::IO { inline EStreamError WriteAll(IStreamWriter *that, const Memory::MemoryViewStreamRead ¶meters) { EStreamError ret = EStreamError::eErrorNone; AuUInt target = parameters.length; AuUInt written = 0; AuUInt total = 0; Memory::MemoryViewStreamRead copy(Memory::MemoryViewRead(parameters.ptr, target), written); while ((target) && (ret = that->Write(copy)) == EStreamError::eErrorNone) { if (written == 0 && target) { parameters.outVariable = written; return EStreamError::eErrorEndOfStream; } total += written; if (total > parameters.length) { // !!! parameters.outVariable = written; return EStreamError::eErrorEndOfStream; } target -= written; copy.ptr = copy.Begin() + written; copy.length -= written; written = 0; } parameters.outVariable = total; return ret; } }