AuroraRuntime/Source/Compression/CompressionInterceptor.hpp
Reece Wilson bb9c383aee [+] ICompressionInterceptor::LimitPassthroughOnOverflow
[+] IOPipeRequest::uMinBytesToRead
[+] (secret api intended for unix users) AuIO::NewLSOSHandleEx
[*] Fix quirks when running Gtk under an io processor
...CtxYield shouldn't spin while work (improper breakout on remote update)
[*] EFileOpenMode::eWrite should assume O_CREAT semantics making eReadWrite somewhat redundant. OpenWrite + eWrite should reasonably work with file-appends. it should not mean force create + cucked GetLength().
2022-11-20 10:31:13 +00:00

53 lines
1.6 KiB
C++

/***
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: CompressionInterceptor.hpp
Date: 2022-9-14
Author: Reece
***/
#pragma once
#include <IO/Protocol/Protocol.hpp>
namespace Aurora::Compression
{
struct CompressionInterceptor : ICompressionInterceptor, IO::IStreamReader
{
CompressionInterceptor();
void Init(const AuSPtr<ICompressionStream> &pStream,
const AuSPtr<BaseStream> &pBaseStream);
bool OnDataAvailable(const AuSPtr<Memory::ByteBuffer> &pReadInByteBuffer,
const AuSPtr<Memory::ByteBuffer> &pWriteOutByteBuffer) override;
inline virtual IO::EStreamError IsOpen() override;
inline virtual IO::EStreamError Read(const Memory::MemoryViewStreamWrite &parameters) override;
inline virtual void Close() override;
void FlushNextFrame() override;
bool ConfigureAutoFlushPerFrame(bool bAutoFlush) override;
bool LimitHasHit() override;
void LimitReset() override;
void LimitSet(AuUInt uLength) override;
bool LimitPassthroughOnOverflow(bool bPassthrough);
AuUInt LimitGetIndex() override;
bool HasFailed() override;
private:
bool bErrorFlag_ {};
bool bSendFlush_ {};
bool bAutoFlush_ {};
AuSPtr<ICompressionStream> pStream_;
AuSPtr<BaseStream> pBaseStream_;
AuSPtr<Memory::ByteBuffer> pLastBuffer_;
AuUInt uCountMax_ { AuNumericLimits<AuUInt>::max() };
AuUInt uCount_ {};
bool bPassthrough_ {};
};
}