feat: add reed-solomon

This commit is contained in:
2021-01-31 12:02:59 +08:00
parent 452b41d51a
commit b131013b3e
4 changed files with 88 additions and 5 deletions

View File

@@ -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
```

14
__misc/reed-solomon/Cargo.lock generated Normal file
View File

@@ -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"

View File

@@ -0,0 +1,11 @@
[package]
name = "reed-solomon"
version = "0.1.0"
authors = ["Hatter Jiang <jht5945@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
reed-solomon = "0.2.1"

View File

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