Crate redux [] [src]

Adaptive arithmetic compression library.

This crate provides standard arithmetic coding implementation that can use customized symbol probability models. This crate offers two adaptive models: AdaptiveLinearModel and AdaptiveTreeModel. Adaptive models continuously update the symbol probability distribution with each encoded symbol.

  • AdaptiveLinearModel is a straightforward, but slow implementation, present mainly for tasting and benchmarking purposes.

  • AdaptiveTreeModel is a Fenwick tree-based implementation, it is advised to use this model for any uses.

It is possible to use a custom model (it may or may not be adaptive) by implementing the model::Model trait.


Any byte stream can be encoded and decoded that implements the std::io::Read trait, and the output can be anything that implements std::io::Write trait. Thus, it is possible to process files or memory objects as well.

use redux::model::*;

let data = vec![0x72u8, 0x65u8, 0x64u8, 0x75u8, 0x78u8];

// Encode
let mut cursor1 = std::io::Cursor::new(&data);
let mut compressed = Vec::<u8>::new();
assert!(redux::compress(&mut cursor1, &mut compressed, AdaptiveTreeModel::new(Parameters::new(8, 14, 16).unwrap())).is_ok());

// Decode
let mut cursor2 = std::io::Cursor::new(&compressed);
let mut decompressed = Vec::<u8>::new();
assert!(redux::decompress(&mut cursor2, &mut decompressed, AdaptiveTreeModel::new(Parameters::new(8, 14, 16).unwrap())).is_ok());

assert_eq!(decompressed, data);



Bit level I/O operations.


Model-independent compression and decompression module.


Symbol frequency distribution models.



Possible errors that occur throughout this library



Compresses istream into ostream using the given model. Returns the number of bytes both in the decompressed and compressed stream.


Decompresses istream into ostream using the given model. Returns the number of bytes both in the compressed and decompressed stream.

Type Definitions


Specialized Result type for the redux library.