diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-07-08 16:25:49 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-07-08 16:25:49 +0200 |
| commit | 6e64806b2f9bd77ec98296b4306c615880894a1c (patch) | |
| tree | 017d77e961037a42d14113acf1a78327cd7182fb /src/main.rs | |
| parent | ae8fad30cd9e76bcba9949095a2cafabb4f1ca8a (diff) | |
add multithreading to merge and generate
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 8cb8466..9a18e7e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +#![feature(thread_id_value)] pub mod vector; pub mod dictionary; pub mod text; @@ -12,6 +13,7 @@ pub mod gui; use index::Index; use std::io::*; use std::env; +use crate::index::GenState; fn main() { let args: Vec<_> = env::args().collect(); @@ -27,8 +29,13 @@ fn main() { let input = args.get(2).unwrap(); let file = args.get(3).unwrap(); - let _ = Index::generate(input, |counter, nof| { - eprint!("\r\x1b[2K{} of {} files indexed ({}%)", counter, nof, (counter * 100) / nof); + let _ = Index::generate(input, |t, p| { + eprint!("\r\x1b[2K{}% ", p); + match t { + GenState::Fetching => { eprint!("fetched") } + GenState::Parsing => { eprint!("parsed") } + GenState::Merging => { eprint!("merged") } + }; std::io::stdout().flush().ok(); }).save(file.to_string()); } else if cmd == "-s" { @@ -48,18 +55,19 @@ fn main() { println!("{}", result.path); } } else if cmd == "-m" { - if args.len() != 5 { - eprintln!("{} -m <index1> <index2> <merged index>", args.get(0).unwrap()); + if args.len() < 5 { + eprintln!("{} -m <output> index...", args.get(0).unwrap()); return; } - let index1 = args.get(2).unwrap().clone(); - let index2 = args.get(3).unwrap().clone(); - let merged = args.get(4).unwrap().clone(); - let _ = Index::merge( - Index::from_file(index1), - Index::from_file(index2) - ).save(merged); + let merged = args.get(2).unwrap().clone(); + let v : Vec<String> = args.get(3..(args.len())).unwrap().into(); + let indexes = v.iter().map(|s| Index::from_file(s.clone())).collect(); + let _ = Index::merge(indexes, + |p| { + eprint!("\r\x1b[2K{}% merged", p); + } + ).save(merged); } } else { let _ = gui::run(); |