diff --git a/Cargo.toml b/Cargo.toml index 2c33aa4..58e4156 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" [dependencies] zip = {version = ">= 0.6.2", default-features = false, features = ["deflate"]} +rayon = "*" [profile.release] lto = true diff --git a/src/main.rs b/src/main.rs index 8b5fdf7..190ef73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,9 @@ mod reader; mod tacview; mod writer; +use rayon::prelude::*; use std::process; +use std::sync::Arc; use crate::{tacview::Coalition, writer::StringWriter}; @@ -22,22 +24,20 @@ fn main_inner() -> Result<(), Box> { let lines = reader::read_data(&input_filename, is_zip)?; let (header, body) = processor::split_into_header_and_body(&lines)?; - let coalition_per_line = processor::divide_body_by_coalition(body)?; + let coalition_per_line = Arc::new(processor::divide_body_by_coalition(body)?); + let header = Arc::new(header); + let body = Arc::new(body); - // for c in &coalition_per_line { - // println!("{c}"); - // } + let _: Vec<_> = vec![Coalition::Blue, Coalition::Red, Coalition::Purple] + .into_par_iter() + .map(|c| { + let mut writer = writer::create_writer(is_zip, &input_filename.clone(), &c).unwrap(); + writer.write_strings(&header).unwrap(); + writer + .write_for_coalition(&body, &coalition_per_line.clone(), c) + .unwrap(); + }) + .collect(); - let mut blue_writer = writer::create_writer(is_zip, &input_filename, &Coalition::Blue)?; - blue_writer.write_strings(header)?; - blue_writer.write_for_coalition(body, &coalition_per_line, Coalition::Blue)?; - - let mut red_writer = writer::create_writer(is_zip, &input_filename, &Coalition::Red)?; - red_writer.write_strings(header)?; - red_writer.write_for_coalition(body, &coalition_per_line, Coalition::Red)?; - - let mut purple_writer = writer::create_writer(is_zip, &input_filename, &Coalition::Purple)?; - purple_writer.write_strings(header)?; - purple_writer.write_for_coalition(body, &coalition_per_line, Coalition::Purple)?; Ok(()) }