slight refactoring of load_from_iterable

This commit is contained in:
boyska 2020-05-18 16:04:39 +02:00
parent 6ea12cfc46
commit 244406a71f

View file

@ -9,18 +9,24 @@ use unidecode::unidecode;
use regex::Regex; use regex::Regex;
#[derive(Default)] #[derive(Default)]
struct Dictionary { struct Dictionary{
words: Vec<String>, words: Vec<String>,
iter_position: usize, iter_position: usize,
} }
/*impl Dictionary { impl Dictionary {
fn default() -> Dictionary { fn load_from_iterable(&mut self, lines: impl Iterator<Item = Result<String, Error>>) {
Dictionary{words: vec![], iter_position: 0} let mut it = lines;
for line in it.by_ref() {
let line = line.unwrap();
let word = line_to_word(line);
self.words.push(word);
}
} }
}*/
impl Iterator for Dictionary { }
impl Iterator for Dictionary{
type Item = String; type Item = String;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
if self.words.len() >= self.iter_position { if self.words.len() >= self.iter_position {
@ -33,16 +39,6 @@ impl Iterator for Dictionary {
} }
} }
fn dictionary_from_iterable(lines: impl Iterator<Item = Result<String, Error>>) -> Dictionary {
let mut w = vec![];
for line in lines {
let line = line.unwrap();
// TODO: normalizza: lascia solo a-z, converti gli accenti, ecc.
w.push(line_to_word(line))
}
return Dictionary{words: w, ..Dictionary::default()};
}
fn line_to_word(l: String) -> String { fn line_to_word(l: String) -> String {
let l = unidecode(&l); let l = unidecode(&l);
let l = l.to_lowercase(); let l = l.to_lowercase();
@ -56,7 +52,8 @@ fn main() {
let f = File::open(fname).unwrap(); let f = File::open(fname).unwrap();
let buf = BufReader::new(&f); let buf = BufReader::new(&f);
let d = dictionary_from_iterable(buf.lines()); let mut d = Dictionary::default();
d.load_from_iterable(buf.lines());
let re = Regex::new(regexp).unwrap(); let re = Regex::new(regexp).unwrap();
for w in d { for w in d {