scarlet_queen_entrypoint/
function.rs1use std::{hash::Hash, io::Write};
2
3use scarlet_queen_core::group::{GroupTrait, InitializerTrait};
4
5use crate::error::Error;
6
7pub const MAIN_LOOP: usize = 100;
8
9pub fn main_loop<T, I, G, W, const N: usize, const R: usize>(
10 out: &mut W,
11) -> Result<Vec<Vec<T>>, Error>
12where
13 T: Hash + Clone,
14 I: InitializerTrait<T, N>,
15 G: GroupTrait<T, N, R>,
16 W: Write,
17{
18 let mut res: Vec<Vec<T>> = vec![];
19 let mut group: G = G::init::<I>();
20 res.push(group.clone_values());
21 for i in 1..(MAIN_LOOP + 1) {
22 writeln!(out, "===== GENERATION {i:3} =====")?;
23 group
24 .one_cycle_out(out)
25 .map_err(|v| Error::LoopError(format!("{v:?}")))?;
26 res.push(group.clone_values());
27 }
28 Ok(res)
29}