Skip to content

chrido/fountain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fountain codes

Build status Crates Docs

The library implements the Luby Transform Code in Rust. For more information have a look at Wikipedia or the paper LT codes on IEEE Xplore.

In future I might add RaptorQ or Online code.

Dependencies

rand

Usage

Add fountaincode as a dependency in Cargo.toml

[dependencies]
fountaincode = "*"

Example

let mut buf = Vec::new();
let mut f = File::open("testfile.bin").unwrap();
try!(f.read_to_end(&mut buf));

let length = buf.len();
let buf_org = buf.clone();

//create an Encoder, and set the length of the chunks.
//In case UDP is used you may want to stay below the MTU size
let enc = Encoder::new(buf, 1024);

//create a Decoder
let mut dec = Decoder::new(length, 1024);

//Encoder is exposed as Iterator
//In practice you may want to send over a Binary Error Channel, e.g., UDP
for drop in enc {

    //Decoder catches droplets
    //In practice you may want to listen on a UDP port for packages
    match dec.catch(drop) {
        Missing(stats) => {
            trace!("{:?} chunks are unknown", cnt.unknown_chunks);
        }
        Finished(data, stats) => {
            done = true;
            println!("finished! {:?}", stats);
            for i in 0..length {
                assert!(buf_org[i], data[i]);
            }
            println!("and the data is correct!");
        }
    }
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Fountain codes implemented in Rust

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages