Codes have different lengths, while applications receive whole bytes. This component chooses a block representation, packs codes into bytes, and holds undelivered bytes until the caller supplies space.
Locate this topic on the global map ↗The first 3 chapters explain algorithms, data layouts, and optimizations. The final chapter connects the proof argument. Read in order or enter from a familiar stage.
- 01IMPLEMENTATION DETAIL↗
Block selection and symbol costs
Compare three block representations and see when sending new codes is worth its cost.
- 02IMPLEMENTATION DETAIL↗
Bit output and byte buffering
Pack variable-length codes into bytes and deliver them to the caller.
- 03IMPLEMENTATION DETAIL↗
Shared storage and output prefixes
Understand how shared memory can preserve symbols that have not yet been read.
- 04PROOF ARGUMENT↗
The output proof argument
Explain how each write preserves meaning from symbols to delivered output.