1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 02:27:43 +00:00

LibCompress: Port ZlibDecompressor to AK::Stream

This commit is contained in:
Tim Schumacher 2023-06-08 19:35:44 +02:00 committed by Sam Atkins
parent 90780d9ade
commit 8a853278d0
7 changed files with 96 additions and 68 deletions

View file

@ -44,22 +44,21 @@ struct ZlibHeader {
};
static_assert(sizeof(ZlibHeader) == sizeof(u16));
class ZlibDecompressor {
class ZlibDecompressor : public Stream {
public:
Optional<ByteBuffer> decompress();
u32 checksum();
static ErrorOr<NonnullOwnPtr<ZlibDecompressor>> create(MaybeOwned<Stream>);
static Optional<ZlibDecompressor> try_create(ReadonlyBytes data);
static Optional<ByteBuffer> decompress_all(ReadonlyBytes);
virtual ErrorOr<Bytes> read_some(Bytes) override;
virtual ErrorOr<size_t> write_some(ReadonlyBytes) override;
virtual bool is_eof() const override;
virtual bool is_open() const override;
virtual void close() override;
private:
ZlibDecompressor(ZlibHeader, ReadonlyBytes data);
ZlibDecompressor(ZlibHeader, NonnullOwnPtr<Stream>);
ZlibHeader m_header;
u32 m_checksum { 0 };
ReadonlyBytes m_input_data;
ReadonlyBytes m_data_bytes;
NonnullOwnPtr<Stream> m_stream;
};
class ZlibCompressor : public Stream {
@ -87,3 +86,8 @@ private:
};
}
template<>
struct AK::Traits<Compress::ZlibHeader> : public AK::GenericTraits<Compress::ZlibHeader> {
static constexpr bool is_trivially_serializable() { return true; }
};