Move model code into model module
This commit is contained in:
parent
b4da1bdc13
commit
8bfe71a1af
55
src/main.rs
55
src/main.rs
@ -3,17 +3,8 @@ use std::collections::HashMap;
|
|||||||
|
|
||||||
mod bit_buffer;
|
mod bit_buffer;
|
||||||
use bit_buffer::{BitReader, BitWriter};
|
use bit_buffer::{BitReader, BitWriter};
|
||||||
|
mod model;
|
||||||
type Model = HashMap<u8, (f64, f64)>;
|
use model::{get_symbol, make_model, Model, ENGLISH};
|
||||||
|
|
||||||
fn get_symbol(model: &Model, low: f64, high: f64) -> Option<u8> {
|
|
||||||
for (symbol, (start, end)) in model {
|
|
||||||
if low >= *start && high < *end {
|
|
||||||
return Some(*symbol);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn encode(input: &[u8], model: &Model) -> Vec<u8> {
|
fn encode(input: &[u8], model: &Model) -> Vec<u8> {
|
||||||
const HALF: u64 = 1 << (u64::BITS - 1);
|
const HALF: u64 = 1 << (u64::BITS - 1);
|
||||||
@ -93,48 +84,6 @@ fn decode(input: &[u8], model: &Model) -> Vec<u8> {
|
|||||||
|
|
||||||
return output;
|
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() {
|
fn main() {
|
||||||
let data = b"hello world-";
|
let data = b"hello world-";
|
||||||
println!("MODEL:");
|
println!("MODEL:");
|
||||||
|
|||||||
53
src/model.rs
Normal file
53
src/model.rs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
pub type Model = HashMap<u8, (f64, f64)>;
|
||||||
|
|
||||||
|
pub fn get_symbol(model: &Model, low: f64, high: f64) -> Option<u8> {
|
||||||
|
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),
|
||||||
|
];
|
||||||
Loading…
x
Reference in New Issue
Block a user