Reece Wilson
bb9c383aee
[+] 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().
53 lines
1.6 KiB
C++
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 ¶meters) 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_ {};
|
|
};
|
|
} |