diff --git a/klout/src/main.rs b/klout/src/main.rs index cc179b0..67d4118 100644 --- a/klout/src/main.rs +++ b/klout/src/main.rs @@ -272,12 +272,53 @@ fn worker_thread_run(init: WorkerThreadInit) { } } +fn print_layout(layout: Layout) { + let km = layout.to_key_matrix(); + for chunk in km.chunks(MATRIX_COUNT / 3) { + for ch in chunk { + print!("{ch}"); + } + println!(); + } +} + +fn clear_screen() { + print!("\x1B[2J\x1B[H"); + io::stdout().flush().unwrap(); +} + +fn ui_thread_run(rx: Receiver<(f64, Layout)>) { + for (eff, layout) in rx.iter() { + clear_screen(); + print_layout(layout); + println!("{eff}"); + } +} + +fn aggregator_thread_run( + layout: Layout, + rx: Receiver<(f64, Layout)>, + tx: Sender<(f64, Layout)>, +) { + let mut best_layout = layout; + let mut min_effort = f64::MAX; + + for (eff, layout) in rx.iter() { + if eff < min_effort { + best_layout = layout; + min_effort = eff; + + tx.send((min_effort, best_layout)).unwrap(); + } + } +} + fn main() -> Result<()> { let (tx_agg, rx_agg) = std::sync::mpsc::channel(); let (tx_ui, rx_ui) = std::sync::mpsc::channel(); let ui_thread = std::thread::spawn(|| { - ui_thread_run(INITIAL_LAYOUT, rx_ui); + ui_thread_run(rx_ui); }); let aggregator_thread = std::thread::spawn(|| {