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.

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

bitio

Bit level I/O operations.

codec

Model-independent compression and decompression module.

model

Symbol frequency distribution models.

Enums

Error

Possible errors that occur throughout this library

Functions

compress

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

decompress

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

Type Definitions

Result

Specialized Result type for the redux library.