From 5a7f0b8535f4356208d36ba1d9ab57b51df0852f Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 30 Jul 2025 18:31:28 +0100 Subject: [PATCH] compress: compressor: merge compress and decompress functions into a single step function --- compress/compressor.c | 46 +++++++++++++-------- compress/include/blue/compress/compressor.h | 5 +-- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/compress/compressor.c b/compress/compressor.c index ad0ca7f..103c1d9 100644 --- a/compress/compressor.c +++ b/compress/compressor.c @@ -57,7 +57,7 @@ enum b_status b_compressor_destroy(struct b_compressor *compressor) return B_SUCCESS; } -enum b_status b_compressor_compress(struct b_compressor *compressor) +static enum b_status compress(struct b_compressor *compressor) { if (compressor->c_mode != B_COMPRESSION_MODE_COMPRESS) { return B_ERR_BAD_STATE; @@ -70,12 +70,37 @@ enum b_status b_compressor_compress(struct b_compressor *compressor) return compressor->c_func->f_compress(compressor); } -enum b_status b_compressor_compress_end(struct b_compressor *compressor) +static enum b_status decompress(struct b_compressor *compressor) { - if (compressor->c_mode != B_COMPRESSOR_MODE_COMPRESS) { + if (compressor->c_mode != B_COMPRESSION_MODE_DECOMPRESS) { return B_ERR_BAD_STATE; } + if (!compressor->c_func->f_decompress) { + return B_ERR_NOT_SUPPORTED; + } + + return compressor->c_func->f_decompress(compressor); +} + +enum b_status b_compressor_step(struct b_compressor *compressor) +{ + switch (compressor->c_mode) { + case B_COMPRESSION_MODE_COMPRESS: + return compress(compressor); + case B_COMPRESSION_MODE_DECOMPRESS: + return decompress(compressor); + default: + return B_ERR_BAD_STATE; + } +} + +enum b_status b_compressor_end(struct b_compressor *compressor) +{ + if (compressor->c_mode != B_COMPRESSION_MODE_COMPRESS) { + return B_SUCCESS; + } + if (!compressor->c_func->f_compress_end) { return B_ERR_NOT_SUPPORTED; } @@ -85,7 +110,7 @@ enum b_status b_compressor_compress_end(struct b_compressor *compressor) return B_ERR_NO_SPACE; } - enum b_status status = b_compressor_compress(compressor); + enum b_status status = b_compressor_step(compressor); if (!B_OK(status)) { return status; } @@ -94,19 +119,6 @@ enum b_status b_compressor_compress_end(struct b_compressor *compressor) return compressor->c_func->f_compress_end(compressor); } -enum b_status b_compressor_decompress(struct b_compressor *compressor) -{ - if (compressor->c_mode != B_COMPRESSION_MODE_DECOMPRESS) { - return B_ERR_BAD_STATE; - } - - if (!compressor->c_func->f_decompress) { - return B_ERR_NOT_SUPPORTED; - } - - return compressor->c_func->f_decompress(compressor); -} - enum b_status b_compressor_reset(struct b_compressor *compressor) { compressor->c_flags &= ~COMPRESSOR_EOF; diff --git a/compress/include/blue/compress/compressor.h b/compress/include/blue/compress/compressor.h index 4832d53..a80e5c3 100644 --- a/compress/include/blue/compress/compressor.h +++ b/compress/include/blue/compress/compressor.h @@ -21,9 +21,8 @@ BLUE_API b_status b_compressor_destroy(b_compressor *compressor); BLUE_API b_status b_compressor_get_buffer_size( const b_compressor *compressor, size_t *inbuf_size, size_t *outbuf_size); -BLUE_API b_status b_compressor_compress(b_compressor *compressor); -BLUE_API b_status b_compressor_compress_end(b_compressor *compressor); -BLUE_API b_status b_compressor_decompress(b_compressor *compressor); +BLUE_API b_status b_compressor_step(b_compressor *compressor); +BLUE_API b_status b_compressor_end(b_compressor *compressor); BLUE_API b_status b_compressor_reset(b_compressor *compressor); BLUE_API bool b_compressor_eof(const b_compressor *compressor);