blob: 9fe447a298fc64625fc39423ff4d4f9cb94d5608 [file] [log] [blame] [view]
# Compression Decoders
Compression decoders read from one input stream (an `io_reader` called `src`)
and write to an output stream (an `io_writer` called `dst`). Wuffs'
implementations have one key method: `decode_io_writer`, named after the
operation (decoding) and the type of the destination (an
[`io_writer`](/doc/note/io-input-output.md)). It incrementally decompresses the
source data.
This method is a [coroutine](/doc/note/coroutines.md), and does not require
either all of the input or all of the output to fit in a single contiguous
buffer. It can suspend with the `$short_read` or `$short_write`
[statuses](/doc/note/statuses.md) when the `src` buffer needs re-filling or the
`dst` buffer needs flushing. For an example, look at the
[example/zcat](/example/zcat/zcat.c) program, which uses fixed size buffers,
but reads arbitrarily long compressed input from stdin and writes arbitrarily
long decompressed output to stdout.
## Dictionaries
TODO: standardize the various dictionary APIs, after Wuffs v0.2 is released.
## Implementations
- [std/deflate](/std/deflate)
- [std/gzip](/std/gzip)
- [std/lzw](/std/lzw)
- [std/zlib](/std/zlib)
## Examples
- [example/library](/example/library)
- [example/zcat](/example/zcat)
## Related Documentation
- [I/O (Input / Output)](/doc/note/io-input-output.md)
See also the general remarks on [Wuffs' standard library](/doc/std/README.md).