11#include <botan/lzma.h>
12#include <botan/internal/compress_utils.h>
13#include <botan/exceptn.h>
20class LZMA_Stream :
public Zlib_Style_Stream<lzma_stream, uint8_t>
25 m_allocator.opaque = alloc();
26 m_allocator.alloc = Compression_Alloc_Info::malloc<size_t>;
28 streamp()->allocator = &m_allocator;
33 ::lzma_end(streamp());
36 bool run(uint32_t flags)
override
38 lzma_ret rc = ::lzma_code(streamp(),
static_cast<lzma_action
>(flags));
40 if(rc != LZMA_OK && rc != LZMA_STREAM_END)
43 return (rc == LZMA_STREAM_END);
46 uint32_t run_flag()
const override {
return LZMA_RUN; }
47 uint32_t flush_flag()
const override {
return LZMA_FULL_FLUSH; }
48 uint32_t finish_flag()
const override {
return LZMA_FINISH; }
50 ::lzma_allocator m_allocator;
53class LZMA_Compression_Stream
final :
public LZMA_Stream
56 explicit LZMA_Compression_Stream(
size_t level)
63 lzma_ret rc = ::lzma_easy_encoder(streamp(), level, LZMA_CHECK_CRC64);
70class LZMA_Decompression_Stream
final :
public LZMA_Stream
73 LZMA_Decompression_Stream()
75 lzma_ret rc = ::lzma_stream_decoder(streamp(), UINT64_MAX,
76 LZMA_TELL_UNSUPPORTED_CHECK);
85Compression_Stream* LZMA_Compression::make_stream(
size_t level)
const
87 return new LZMA_Compression_Stream(level);
90Compression_Stream* LZMA_Decompression::make_stream()
const
92 return new LZMA_Decompression_Stream;
static void free(void *self, void *ptr)
int(* final)(unsigned char *, CTX *)