49 lines
1.1 KiB
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_compression_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;
|
|
}
|