1#ifndef CASACORE_SISCO_DEFLATE_H_
2#define CASACORE_SISCO_DEFLATE_H_
15 :
compressor_(libdeflate_alloc_compressor(compression_level)) {
17 throw std::runtime_error(
18 "Could not create compressor: bad settings or out of memory");
21 Compressor(
int compression_level,
const libdeflate_options& options)
23 libdeflate_alloc_compressor_ex(compression_level, &options)) {
25 throw std::runtime_error(
26 "Could not create compressor: bad settings or out of memory");
36 size_t Compress(std::span<const std::byte> input,
37 std::span<std::byte> output) {
38 return libdeflate_deflate_compress(
compressor_, input.data(), input.size(),
39 output.data(), output.size());
48 return libdeflate_deflate_compress_bound(
compressor_, input_size);
59 throw std::runtime_error(
60 "Could not create decompressor: bad settings or out of memory");
66 throw std::runtime_error(
67 "Could not create decompressor: bad settings or out of memory");
73 std::span<std::byte> output) {
74 size_t actual_out_nbytes_ret;
75 const libdeflate_result result = libdeflate_deflate_decompress(
76 decompressor_, input.data(), input.size(), output.data(), output.size(),
77 &actual_out_nbytes_ret);
79 case LIBDEFLATE_SUCCESS:
81 case LIBDEFLATE_BAD_DATA:
82 throw std::runtime_error(
"Could not decompress data: bad data");
83 case LIBDEFLATE_SHORT_OUTPUT:
84 throw std::runtime_error(
85 "Could not decompress data: data shorter than expected");
86 case LIBDEFLATE_INSUFFICIENT_SPACE:
87 throw std::runtime_error(
88 "Could not decompress data: insufficient space in output buffer");
90 return actual_out_nbytes_ret;
size_t Compress(std::span< const std::byte > input, std::span< std::byte > output)
Compresses the input into output.
size_t CompressBound(size_t input_size)
Worst-case upper bound on the number of bytes of compressed data that may be produced by compressing ...
Compressor(int compression_level, const libdeflate_options &options)
struct libdeflate_compressor * compressor_
Compressor(int compression_level)
struct libdeflate_decompressor * decompressor_
size_t Decompress(std::span< const std::byte > input, std::span< std::byte > output)
Decompressor(const libdeflate_options &options)