Crate redux

Source
Expand description

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.

§Examples

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);

Modules§

  • Bit level I/O operations.
  • Model-independent compression and decompression module.
  • Symbol frequency distribution models.

Enums§

  • Possible errors that occur throughout this library

Functions§

  • 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 Aliases§

  • Specialized Result type for the redux library.