Wuffs' standard library consists of multiple packages, each implementing a particular file format or algorithm. Those packages can be grouped into several categories:
The general pattern is that a package
png) contains a struct
decoder, etc) that implements a package-independent interface. For example, every compression decoder struct would have a
transform_io method. In C, this would be invoked as
// Allocate and initialize the struct. wuffs_foo__decoder* dec = etc; // Do the work. Error checking is not shown, for brevity. wuffs_base__status status = wuffs_foo__decoder__transform_io(dec, etc);
When that C library is used as C++, that last line can be shortened:
wuffs_base__status status = dec->transform_io(etc);
See also the glossary, as well as the notes on:
By default, building Wuffs' standard library builds the entire thing (provided that you've defined the
WUFFS_IMPLEMENTATION C macro), implementing a variety of codecs and file formats.
Packages can be individually allow-listed, for smaller binaries and faster compiles. Opt in by also defining
WUFFS_CONFIG__MODULES and then also
WUFFS_CONFIG__MODULE__ETC for each
ETC (and its dependencies, listed below) to enable.
GIF: BASE, LZW
GZIP: BASE, CRC32, DEFLATE
PNG: BASE, ADLER32, CRC32, DEFLATE, ZLIB
ZLIB: BASE, ADLER32, DEFLATE
For the auxiliary modules:
AUX_CBOR: AUX_BASE, BASE, CBOR
AUX_IMAGE: AUX_BASE, BASEand whichever image-related modules (and their dependencies) you want, e.g.
AUX_JSON: AUX_BASE, BASE, JSON