aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-07-08 16:25:49 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2023-07-08 16:25:49 +0200
commit6e64806b2f9bd77ec98296b4306c615880894a1c (patch)
tree017d77e961037a42d14113acf1a78327cd7182fb /src/main.rs
parentae8fad30cd9e76bcba9949095a2cafabb4f1ca8a (diff)
add multithreading to merge and generate
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs30
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();