From 69188d8c1ec1350e0cdced472590c33e4423dbbe Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Tue, 24 Oct 2023 17:14:54 +0100 Subject: [PATCH] [+] ICompressionStream::ToStreamReader --- Include/Aurora/Compression/ICompressionStream.hpp | 6 ++++++ Source/Compression/AuBaseStream.cpp | 5 +++++ Source/Compression/AuBaseStream.hpp | 14 +++++++++++--- Source/IO/Adapters/AuIOAdapterCompression.cpp | 15 ++++++++++++--- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Include/Aurora/Compression/ICompressionStream.hpp b/Include/Aurora/Compression/ICompressionStream.hpp index d4059e4f..bb3a47c4 100644 --- a/Include/Aurora/Compression/ICompressionStream.hpp +++ b/Include/Aurora/Compression/ICompressionStream.hpp @@ -82,5 +82,11 @@ namespace Aurora::Compression * @return */ virtual AuOptional GetLastErrorString() = 0; + + /** + * @brief + * @return + */ + virtual IO::IStreamReader *ToStreamReader() = 0; }; } \ No newline at end of file diff --git a/Source/Compression/AuBaseStream.cpp b/Source/Compression/AuBaseStream.cpp index e6f3893d..7fdfd8e0 100644 --- a/Source/Compression/AuBaseStream.cpp +++ b/Source/Compression/AuBaseStream.cpp @@ -227,4 +227,9 @@ namespace Aurora::Compression { return false; } + + IO::IStreamReader *BaseStream::ToStreamReader() + { + return &this->reader_; + } } \ No newline at end of file diff --git a/Source/Compression/AuBaseStream.hpp b/Source/Compression/AuBaseStream.hpp index e1219d45..a06f53eb 100644 --- a/Source/Compression/AuBaseStream.hpp +++ b/Source/Compression/AuBaseStream.hpp @@ -8,12 +8,18 @@ #pragma once #include "AuIngestableReadBase.hpp" +#include namespace Aurora::Compression { - struct BaseStream : ICompressionStream, protected IngestableReadBase + struct BaseStream : + ICompressionStream, + protected IngestableReadBase { - inline BaseStream(AuUInt32 bufferSize = 4096 * 64) : _outbufferOwned(bufferSize, true), uBufferSize_(bufferSize) + inline BaseStream(AuUInt32 bufferSize = 4096 * 64) : + _outbufferOwned(bufferSize, true), + uBufferSize_(bufferSize), + reader_(AuUnsafeRaiiToShared(this)) { SetBuffer({}); } @@ -48,6 +54,8 @@ namespace Aurora::Compression virtual bool Flush() override; virtual bool Finish() override; + virtual IO::IStreamReader *ToStreamReader() override; + bool IsValid(); AuSPtr GetBuffer(); @@ -61,7 +69,7 @@ namespace Aurora::Compression protected: virtual AuStreamReadWrittenPair_t Ingest_s(AuUInt32 dwBytesFromUnprocessedInputSource) = 0; - + IO::Adapters::CompressionStreamReader reader_; AuSPtr pOutputBuffer_; AuWPtr wpInBuffer_; AuSPtr pOutputBufferInterface_; diff --git a/Source/IO/Adapters/AuIOAdapterCompression.cpp b/Source/IO/Adapters/AuIOAdapterCompression.cpp index f8920c26..61c91354 100644 --- a/Source/IO/Adapters/AuIOAdapterCompression.cpp +++ b/Source/IO/Adapters/AuIOAdapterCompression.cpp @@ -25,7 +25,14 @@ namespace Aurora::IO::Adapters EStreamError CompressionStreamReader::IsOpen() { - return this->bErrored_ ? EStreamError::eErrorEndOfStream : EStreamError::eErrorNone; + if (this->pCompressionStream->GetLastError()) + { + return EStreamError::eErrorGenericFault; + } + + return this->bErrored_ ? + EStreamError::eErrorEndOfStream : + EStreamError::eErrorNone; } EStreamError CompressionStreamReader::Read(const Memory::MemoryViewStreamWrite ¶meters) @@ -67,7 +74,7 @@ namespace Aurora::IO::Adapters if (!this->pCompressionStream->GoBackByProcessedN(this->uOffset - offset)) { SysPushErrorIO("Negative compression seek out of bounds"); - return EStreamError::eErrorStreamInterrupted; + return EStreamError::eErrorOutOfBounds; } } else @@ -75,7 +82,7 @@ namespace Aurora::IO::Adapters if (!this->pCompressionStream->GoForwardByProcessedN(offset - this->uOffset)) { SysPushErrorIO("Positive compression seek out of bounds"); - return EStreamError::eErrorStreamInterrupted; + return EStreamError::eErrorOutOfBounds; } } @@ -100,11 +107,13 @@ namespace Aurora::IO::Adapters AUKN_SYM AuSPtr NewCompressionReadAdapter(const AuSPtr &pCompresionStream) { + SysCheckArgNotNull(pCompresionStream, {}); return AuMakeShared(pCompresionStream); } AUKN_SYM AuSPtr NewCompressionSeekingAdapter(const AuSPtr &pCompresionStream) { + SysCheckArgNotNull(pCompresionStream, {}); return AuMakeShared(pCompresionStream); } } \ No newline at end of file