diff --git a/README.md b/README.md index 765637a..98809a9 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,10 @@ Project or files: ├── README_2.md ├── __concurrent │   ├── arc-swap -│   └── green-threads +│   ├── crossbeam_n_parking_lot +│   ├── glommio +│   ├── green-threads +│   └── rayon ├── __cpu │   └── x86 ├── __crypto @@ -22,13 +25,17 @@ Project or files: │   ├── ring │   ├── rsa │   ├── secp256k1 +│   ├── simple_contract │   ├── ssh-keys │   └── totp ├── __database +│   ├── barrel +│   ├── gluesql │   ├── persy │   ├── rocksdb │   ├── rusqlite -│   └── sled +│   ├── sled +│   └── sqlparser ├── __diff │   ├── diffy │   └── prettydiff @@ -38,12 +45,16 @@ Project or files: │   ├── err_derive │   └── quick_error ├── __ffi +│   ├── abi_stable_crates │   ├── c +│   ├── c2 │   ├── c_export │   ├── c_layout │   ├── cpp +│   ├── dotalib │   ├── jni -│   └── live-reload-rust +│   ├── live-reload-rust +│   └── rust_link_a ├── __fs │   └── fuse ├── __gui @@ -52,6 +63,7 @@ Project or files: │   ├── plotters │   └── svg ├── __lang +│   ├── boa │   ├── peg │   ├── pest │   ├── quickjs @@ -62,6 +74,7 @@ Project or files: │   ├── sysinfo │   └── unixsocket ├── __log +│   ├── fern │   └── log4rs ├── __machinelearning │   └── rusty-machine @@ -71,14 +84,17 @@ Project or files: │   ├── human_panic │   ├── lazy_static │   ├── num_cpus +│   ├── reed-solomon │   ├── regex │   ├── smartstring +│   ├── uint │   └── walkdir ├── __network │   ├── ip │   ├── n_pcap │   ├── nfqueue │   ├── pcap +│   ├── socket2 │   ├── tcp │   └── udp_laminar ├── __performance @@ -96,6 +112,8 @@ Project or files: │   ├── encoding │   ├── flatbuffers │   ├── hjson +│   ├── no_proto +│   ├── prost │   └── serde_json ├── __shell │   ├── ssh2 @@ -107,11 +125,14 @@ Project or files: │   ├── ops │   └── thread ├── __template -│   └── askama +│   ├── askama +│   └── handlebars-rust ├── __term │   ├── colored_msg │   ├── confy_table │   ├── indicatif +│   ├── rustyline +│   ├── structopt │   └── term ├── __time │   ├── chrono @@ -151,11 +172,12 @@ Project or files: ├── ref_n_and.rs ├── sample.txt ├── slice.rs + ├── string.rs ├── time.rs ├── vec.rs └── while.rs -126 directories, 28 files +147 directories, 31 files ``` diff --git a/__misc/reed-solomon/Cargo.lock b/__misc/reed-solomon/Cargo.lock new file mode 100644 index 0000000..70f1515 --- /dev/null +++ b/__misc/reed-solomon/Cargo.lock @@ -0,0 +1,14 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "reed-solomon" +version = "0.1.0" +dependencies = [ + "reed-solomon 0.2.1", +] + +[[package]] +name = "reed-solomon" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13de68c877a77f35885442ac72c8beb7c2f0b09380c43b734b9d63d1db69ee54" diff --git a/__misc/reed-solomon/Cargo.toml b/__misc/reed-solomon/Cargo.toml new file mode 100644 index 0000000..39fca06 --- /dev/null +++ b/__misc/reed-solomon/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "reed-solomon" +version = "0.1.0" +authors = ["Hatter Jiang "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +reed-solomon = "0.2.1" + diff --git a/__misc/reed-solomon/src/main.rs b/__misc/reed-solomon/src/main.rs new file mode 100644 index 0000000..05fda32 --- /dev/null +++ b/__misc/reed-solomon/src/main.rs @@ -0,0 +1,36 @@ +use reed_solomon::Encoder; +use reed_solomon::Decoder; + +fn main() { + let data = b"Hello World!"; + + // Length of error correction code + let ecc_len = 8; + + // Create encoder and decoder with + let enc = Encoder::new(ecc_len); + let dec = Decoder::new(ecc_len); + + // Encode data + let encoded = enc.encode(&data[..]); + + // Simulate some transmission errors + let mut corrupted = *encoded; + for i in 0..4 { + corrupted[i] = 0x0; + } + + // Try to recover data + let known_erasures = [0]; + let recovered = dec.correct(&mut corrupted, Some(&known_erasures)).unwrap(); + + let orig_str = std::str::from_utf8(data).unwrap(); + let recv_str = std::str::from_utf8(recovered.data()).unwrap(); + + println!("message: {:?}", orig_str); + println!("original data: {:?}", data); + println!("encoded: {:?}", encoded.data()); + println!("error correction code: {:?}", encoded.ecc()); + println!("corrupted: {:?}", corrupted); + println!("repaired: {:?}", recv_str); +}