pub unsafe extern "C" fn ZSTD_compressBegin(
    cctx: *mut ZSTD_CCtx,
    compressionLevel: c_int
) -> usize
Expand description

Buffer-less streaming compression (synchronous mode)

A ZSTD_CCtx object is required to track streaming operations. Use ZSTD_createCCtx() / ZSTD_freeCCtx() to manage resource. ZSTD_CCtx object can be re-used multiple times within successive compression operations.

Start by initializing a context. Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression. It’s also possible to duplicate a reference context which has already been initialized, using ZSTD_copyCCtx()

Then, consume your input using ZSTD_compressContinue(). There are some important considerations to keep in mind when using this advanced function :

  • ZSTD_compressContinue() has no internal buffer. It uses externally provided buffers only.
  • Interface is synchronous : input is consumed entirely and produces 1+ compressed blocks.
  • Caller must ensure there is enough space in dst to store compressed data under worst case scenario. Worst case evaluation is provided by ZSTD_compressBound(). ZSTD_compressContinue() doesn’t guarantee recover after a failed compression.
  • ZSTD_compressContinue() presumes prior input is still accessible and unmodified (up to maximum distance size, see WindowLog). It remembers all previous contiguous blocks, plus one separated memory segment (which can itself consists of multiple contiguous blocks)
  • ZSTD_compressContinue() detects that prior input has been overwritten when src buffer overlaps. In which case, it will “discard” the relevant memory section from its history.

Finish a frame with ZSTD_compressEnd(), which will write the last block(s) and optional checksum. It’s possible to use srcSize==0, in which case, it will write a final empty block to end the frame. Without last block mark, frames are considered unfinished (hence corrupted) by compliant decoders.

ZSTD_CCtx object can be re-used (ZSTD_compressBegin()) to compress again.