Files
bluelib/compress/function.c

49 lines
1.1 KiB
C

#include "function.h"
#include <blue/compress/compressor.h>
#include <blue/compress/function.h>
#ifdef B_COMPRESSOR_SUPPORTED_ZSTD
extern const struct b_compression_function z__b_compression_function_zstd;
#endif
static const struct b_compression_function *compressor_functions[] = {
#ifdef B_COMPRESSOR_SUPPORTED_ZSTD
[B_COMPRESSOR_FUNCTION_ZSTD] = &z__b_compression_function_zstd,
#endif
};
static const size_t nr_compressor_functions
= sizeof compressor_functions / sizeof compressor_functions[0];
const struct b_compression_function *b_compression_function_get_by_id(
enum b_compression_function_id id)
{
if (id < 0 || id >= nr_compressor_functions) {
return NULL;
}
return compressor_functions[id];
}
enum b_status b_compression_function_get_buffer_size(
const struct b_compression_function *func, enum b_compressor_mode mode,
size_t *inbuf_size, size_t *outbuf_size)
{
if (!func->f_buffer_size) {
return B_ERR_NOT_SUPPORTED;
}
size_t in = 0, out = 0;
enum b_status status = func->f_buffer_size(mode, &in, &out);
if (inbuf_size) {
*inbuf_size = in;
}
if (outbuf_size) {
*outbuf_size = out;
}
return status;
}