ZXC 0.15.0
High-performance asymmetric lossless compression library
Loading...
Searching...
No Matches
zxc_buffer.h File Reference

One-shot buffer compression and decompression. More...

#include <stddef.h>
#include <stdint.h>
#include "zxc_export.h"
#include "zxc_opts.h"

Go to the source code of this file.

Data Structures

struct  zxc_frame_info_t
 What a frame's header and footer declare, read without decoding. More...
 

Typedefs

typedef struct zxc_cctx_s zxc_cctx
 Opaque reusable compression context (see zxc_create_cctx).
 
typedef struct zxc_dctx_s zxc_dctx
 Opaque reusable decompression context (see zxc_create_dctx).
 

Functions

int zxc_min_level (void)
 Minimum supported compression level.
 
int zxc_max_level (void)
 Maximum supported compression level.
 
int zxc_default_level (void)
 Default compression level.
 
const char * zxc_version_string (void)
 Library version string, "MAJOR.MINOR.PATCH".
 
uint64_t zxc_compress_bound (const size_t input_size)
 Maximum compressed size for an input of input_size bytes.
 
int64_t zxc_compress (const void *src, const size_t src_size, void *dst, const size_t dst_capacity, const zxc_compress_opts_t *opts)
 Compresses a buffer into a complete ZXC archive.
 
int64_t zxc_decompress (const void *src, const size_t src_size, void *dst, const size_t dst_capacity, const zxc_decompress_opts_t *opts)
 Decompresses a complete ZXC archive.
 
size_t zxc_decompress_inplace_bound (const void *src, const size_t src_size)
 Buffer size required for an in-place decompression of src.
 
int64_t zxc_decompress_inplace (void *buffer, const size_t buffer_capacity, const size_t comp_size, const zxc_decompress_opts_t *opts)
 Decompresses inside a single caller-owned buffer.
 
uint64_t zxc_get_decompressed_size (const void *src, const size_t src_size)
 Reads the original size from the archive footers, without decoding.
 
uint32_t zxc_get_dict_id (const void *src, size_t src_size)
 Reads the dictionary ID from an archive header, without decoding.
 
int zxc_get_frame_info (const void *src, size_t src_size, zxc_frame_info_t *info, size_t info_size)
 Reads a frame's header and footer, without decoding.
 
int zxc_get_last_frame_info (const void *src, size_t src_size, zxc_frame_info_t *info, size_t info_size)
 Reads the last frame of src, without decoding.
 
size_t zxc_frame_info_size (void)
 Returns sizeof(zxc_frame_info_t) as compiled into the library.
 
uint64_t zxc_compress_block_bound (size_t input_size)
 Maximum compressed size for a single block.
 
uint64_t zxc_decompress_block_bound (const size_t uncompressed_size)
 Minimum dst_capacity zxc_decompress_block() needs for a block of uncompressed_size bytes.
 
int64_t zxc_compress_block (zxc_cctx *cctx, const void *src, size_t src_size, void *dst, size_t dst_capacity, const zxc_compress_opts_t *opts)
 Compresses a single block without file framing.
 
int64_t zxc_decompress_block (zxc_dctx *dctx, const void *src, size_t src_size, void *dst, size_t dst_capacity, const zxc_decompress_opts_t *opts)
 Decompresses a single block produced by zxc_compress_block().
 
int64_t zxc_decompress_block_safe (zxc_dctx *dctx, const void *src, const size_t src_size, void *dst, const size_t dst_capacity, const zxc_decompress_opts_t *opts)
 Decompresses a single block into an exactly-sized destination.
 
uint64_t zxc_estimate_cctx_size (size_t src_size, int level)
 Estimates peak compression memory for a given block size and level.
 
zxc_cctx * zxc_create_cctx (const zxc_compress_opts_t *opts)
 Creates a reusable compression context.
 
void zxc_free_cctx (zxc_cctx *cctx)
 Frees a compression context and its resources.
 
int64_t zxc_compress_cctx (zxc_cctx *cctx, const void *src, size_t src_size, void *dst, size_t dst_capacity, const zxc_compress_opts_t *opts)
 Compresses data using a reusable context.
 
zxc_dctx * zxc_create_dctx (void)
 Creates a reusable decompression context.
 
void zxc_free_dctx (zxc_dctx *dctx)
 Frees a decompression context and its resources.
 
int64_t zxc_decompress_dctx (zxc_dctx *dctx, const void *src, size_t src_size, void *dst, size_t dst_capacity, const zxc_decompress_opts_t *opts)
 Decompresses data using a reusable context.
 
int64_t zxc_decompress_inplace_dctx (zxc_dctx *dctx, void *buffer, const size_t buffer_capacity, const size_t comp_size, const zxc_decompress_opts_t *opts)
 In-place decompression with a caller-supplied context.
 
size_t zxc_static_cctx_workspace_size (const size_t block_size, const int level)
 Exact size of a static compression workspace.
 
zxc_cctx * zxc_init_static_cctx (void *workspace, const size_t workspace_size, const zxc_compress_opts_t *opts)
 Initialises a compression context inside a caller-supplied workspace.
 
size_t zxc_static_dctx_workspace_size (const size_t block_size)
 Exact size of a static decompression workspace.
 
zxc_dctx * zxc_init_static_dctx (void *workspace, const size_t workspace_size, const size_t block_size)
 Initialises a decompression context inside a caller-supplied workspace.
 

Detailed Description

One-shot buffer compression and decompression.

The simplest way to use ZXC: one input buffer in, one output buffer out. Everything here is single-threaded and blocking.

Typical usage
// Compress
size_t bound = zxc_compress_bound(src_size);
void *dst = malloc(bound);
zxc_compress_opts_t opts = { .level = ZXC_LEVEL_DEFAULT, .checksum_enabled = 1 };
int64_t csize = zxc_compress(src, src_size, dst, bound, &opts);
// Decompress
uint64_t orig = zxc_get_decompressed_size(dst, csize);
void *out = malloc(orig);
int64_t dsize = zxc_decompress(dst, csize, out, orig, &dopts);
int64_t zxc_decompress(const void *src, const size_t src_size, void *dst, const size_t dst_capacity, const zxc_decompress_opts_t *opts)
Decompresses a complete ZXC archive.
uint64_t zxc_get_decompressed_size(const void *src, const size_t src_size)
Reads the original size from the archive footers, without decoding.
int64_t zxc_compress(const void *src, const size_t src_size, void *dst, const size_t dst_capacity, const zxc_compress_opts_t *opts)
Compresses a buffer into a complete ZXC archive.
uint64_t zxc_compress_bound(const size_t input_size)
Maximum compressed size for an input of input_size bytes.
@ ZXC_LEVEL_DEFAULT
Recommended default: better ratio and decode speed than LZ4.
Options for compression.
Definition zxc_opts.h:58
int level
Compression level 1-7 (0 = default, ZXC_LEVEL_DEFAULT).
Definition zxc_opts.h:60
Options for decompression.
Definition zxc_opts.h:86
int checksum_enabled
1 to verify the block checksums and archive digest, 0 to skip.
Definition zxc_opts.h:88
See also
zxc_stream.h multi-threaded FILE* streaming.
zxc_pstream.h single-threaded push streaming.

Definition in file zxc_buffer.h.