diff options
Diffstat (limited to 'src/corpus.rs')
| -rw-r--r-- | src/corpus.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/corpus.rs b/src/corpus.rs index 9b522e0..e1c903b 100644 --- a/src/corpus.rs +++ b/src/corpus.rs @@ -1,11 +1,21 @@ use std::fmt; use std::fs; -use crate::config::*; use crate::layout::*; -const NUM_BIGRAMS: usize = NUM_KEYS * NUM_KEYS; +const fn build_lookup_table() -> [usize; 128] { + let mut result = [0; 128]; + let mut i = 0; + + while i < NUM_KEYS { + result[KEY_CHARS[i] as usize] = i; + i += 1; + } + return result; +} +const CHAR_TO_INDEX: [usize; 128] = build_lookup_table(); +const NUM_BIGRAMS: usize = NUM_KEYS * NUM_KEYS; pub struct Corpus { bigram_count: [u32; NUM_BIGRAMS], character_count: [u32; 256], @@ -20,6 +30,10 @@ fn pair_to_index(x: char, y: char) -> usize { } impl Corpus { + pub fn get_character_count(&self, c: char) -> u32 { + self.character_count[c as usize] + } + pub fn load(path: &str) -> Result<Corpus, std::io::Error> { let contents = fs::read_to_string(path)?; |
