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

LibCompress: Implement the XZ delta filter

This commit is contained in:
Tim Schumacher 2023-10-22 19:49:41 +02:00 committed by Jelle Raaijmakers
parent f0b08e9dea
commit 786e654dfd
3 changed files with 102 additions and 3 deletions

View file

@ -6,6 +6,7 @@
#pragma once
#include <AK/CircularBuffer.h>
#include <AK/ConstrainedStream.h>
#include <AK/CountingStream.h>
#include <AK/Endian.h>
@ -98,6 +99,31 @@ struct [[gnu::packed]] XzFilterLzma2Properties {
};
static_assert(sizeof(XzFilterLzma2Properties) == 1);
// 5.3.3. Delta
struct [[gnu::packed]] XzFilterDeltaProperties {
u8 encoded_distance;
u32 distance() const;
};
static_assert(sizeof(XzFilterDeltaProperties) == 1);
class XzFilterDelta : public Stream {
public:
static ErrorOr<NonnullOwnPtr<XzFilterDelta>> create(MaybeOwned<Stream>, u32 distance);
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:
XzFilterDelta(MaybeOwned<Stream>, CircularBuffer);
MaybeOwned<Stream> m_stream;
CircularBuffer m_buffer;
};
class XzDecompressor : public Stream {
public:
static ErrorOr<NonnullOwnPtr<XzDecompressor>> create(MaybeOwned<Stream>);