Skip to content

Latest commit

 

History

History
 
 

std

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Standard Library

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 foo (e.g. jpeg, png) contains a struct bar (e.g. hasher, 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:

Modules and Dependencies

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.

  • ADLER32: BASE
  • BMP: BASE
  • CBOR: BASE
  • CRC32: BASE
  • DEFLATE: BASE
  • GIF: BASE, LZW
  • GZIP: BASE, CRC32, DEFLATE
  • JSON: BASE
  • LZW: BASE
  • NIE: BASE
  • PNG: BASE, ADLER32, CRC32, DEFLATE, ZLIB
  • WBMP: BASE
  • ZLIB: BASE, ADLER32, DEFLATE

For the auxiliary modules:

  • AUX_CBOR: AUX_BASE, BASE, CBOR
  • AUX_IMAGE: AUX_BASE, BASE and whichever image-related modules (and their dependencies) you want, e.g. GIF, PNG, etc.
  • AUX_JSON: AUX_BASE, BASE, JSON