#pragma once #include "fs/IStreamSource.h" #include "tl/memory_buffer.h" #include "fs/Api.h" #include "tl/ptr.h" namespace fs { class FS_API DeflateStreamSource final : public IStreamSource { public: explicit DeflateStreamSource(IStreamSource& source); //non-owning explicit DeflateStreamSource(tl::unique_ref source); //owning ~DeflateStreamSource() override; tl::optional getLastError() const override; size_t read(tl::span data) override; bool isEOS() const override; size_t getPreferredBufferSize() const override; tl::unique_ref extract(); private: tl::unique_ptr m_ownedSource; IStreamSource& m_source; mutable tl::optional m_optLastError; void initializeDeflate(); struct ZLib; tl::unique_ptr m_zlib; tl::memory_buffer m_buffer; }; }