diff --git a/src/main.rs b/src/main.rs index 4bf799b..c6fe660 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,17 +3,8 @@ use std::collections::HashMap; mod bit_buffer; use bit_buffer::{BitReader, BitWriter}; - -type Model = HashMap; - -fn get_symbol(model: &Model, low: f64, high: f64) -> Option { - for (symbol, (start, end)) in model { - if low >= *start && high < *end { - return Some(*symbol); - } - } - return None; -} +mod model; +use model::{get_symbol, make_model, Model, ENGLISH}; fn encode(input: &[u8], model: &Model) -> Vec { const HALF: u64 = 1 << (u64::BITS - 1); @@ -93,48 +84,6 @@ fn decode(input: &[u8], model: &Model) -> Vec { return output; } - -fn make_model(probabilities: &[(u8, f64)]) -> Model { - let mut model = HashMap::new(); - let mut end: f64 = 0.0; - for (symbol, probability) in probabilities { - let start: f64 = end; - end = start + probability; - model.insert(*symbol, (start, end)); - println!("{}: [{}, {})", *symbol as char, start, end); - } - return model; -} -const ENGLISH: &[(u8, f64)] = &[ - (b'a', 0.08), - (b'b', 0.01), - (b'c', 0.02), - (b'd', 0.04), - (b'e', 0.12), - (b'f', 0.02), - (b'g', 0.02), - (b'h', 0.06), - (b'i', 0.07), - (b'j', 0.01), - (b'k', 0.01), - (b'l', 0.04), - (b'm', 0.02), - (b'n', 0.06), - (b'o', 0.07), - (b'p', 0.01), - (b'q', 0.01), - (b'r', 0.06), - (b's', 0.06), - (b't', 0.09), - (b'u', 0.02), - (b'v', 0.01), - (b'w', 0.02), - (b'x', 0.01), - (b'y', 0.02), - (b'z', 0.01), - (b' ', 0.01), - (b'-', 0.02), -]; fn main() { let data = b"hello world-"; println!("MODEL:"); diff --git a/src/model.rs b/src/model.rs new file mode 100644 index 0000000..c7a29ea --- /dev/null +++ b/src/model.rs @@ -0,0 +1,53 @@ +use std::collections::HashMap; +pub type Model = HashMap; + +pub fn get_symbol(model: &Model, low: f64, high: f64) -> Option { + for (symbol, (start, end)) in model { + if low >= *start && high < *end { + return Some(*symbol); + } + } + return None; +} + +pub fn make_model(probabilities: &[(u8, f64)]) -> Model { + let mut model = HashMap::new(); + let mut end: f64 = 0.0; + for (symbol, probability) in probabilities { + let start: f64 = end; + end = start + probability; + model.insert(*symbol, (start, end)); + println!("{}: [{}, {})", *symbol as char, start, end); + } + return model; +} +pub const ENGLISH: &[(u8, f64)] = &[ + (b'a', 0.08), + (b'b', 0.01), + (b'c', 0.02), + (b'd', 0.04), + (b'e', 0.12), + (b'f', 0.02), + (b'g', 0.02), + (b'h', 0.06), + (b'i', 0.07), + (b'j', 0.01), + (b'k', 0.01), + (b'l', 0.04), + (b'm', 0.02), + (b'n', 0.06), + (b'o', 0.07), + (b'p', 0.01), + (b'q', 0.01), + (b'r', 0.06), + (b's', 0.06), + (b't', 0.09), + (b'u', 0.02), + (b'v', 0.01), + (b'w', 0.02), + (b'x', 0.01), + (b'y', 0.02), + (b'z', 0.01), + (b' ', 0.01), + (b'-', 0.02), +];