| # 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: | |
| - [Compression Decoders](/doc/std/compression-decoders.md). | |
| - [Hashers](/doc/std/hashers.md). | |
| - [Image Decoders](/doc/std/image-decoders.md). | |
| 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](/doc/glossary.md), as well as the notes on: | |
| - [Coroutines](/doc/note/coroutines.md). | |
| - [Initialization](/doc/note/initialization.md). | |
| - [Statuses](/doc/note/statuses.md). | |
| ## 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` | |
| - `BZIP2: BASE` | |
| - `CBOR: BASE` | |
| - `CRC32: BASE` | |
| - `CRC64: BASE` | |
| - `DEFLATE: BASE` | |
| - `ETC2: BASE` | |
| - `GIF: BASE` | |
| - `GZIP: BASE, CRC32, DEFLATE` | |
| - `HANDSUM: BASE` | |
| - `JPEG: BASE` | |
| - `JSON: BASE` | |
| - `LZIP: BASE, CRC32, LZMA` | |
| - `LZMA: BASE` | |
| - `LZW: BASE` | |
| - `NETPBM: BASE` | |
| - `NIE: BASE` | |
| - `PNG: BASE, ADLER32, CRC32, DEFLATE, ZLIB` | |
| - `QOI: BASE` | |
| - `SHA256: BASE` | |
| - `TGA: BASE` | |
| - `THUMBHASH: BASE` | |
| - `VP8: BASE` | |
| - `WBMP: BASE` | |
| - `WEBP: BASE, VP8` | |
| - `XXHASH32: BASE` | |
| - `XXHASH64: BASE` | |
| - `XZ: BASE, CRC32, CRC64, LZMA, SHA256` | |
| - `ZLIB: BASE, ADLER32, DEFLATE` | |
| For the [auxiliary modules](/doc/note/auxiliary-code.md): | |
| - `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` |