scarlet_queen_entrypoint/
function.rs

1use 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}