use num::Float;
use std::fmt::Debug;
pub type Custom<'a, F, const N: usize> = Box<dyn FnMut(usize, F, F, [F; N], F, [F; N]) + 'a>;
pub enum Status<'a, F: Float + Debug, const N: usize> {
None,
Periodic {
nk: usize,
},
Custom {
f: Custom<'a, F, N>,
},
}
impl<'a, F: Float + Debug, const N: usize> Status<'a, F, N> {
#[allow(clippy::print_stdout)]
#[allow(clippy::use_debug)]
pub fn print(&mut self, k: usize, t: F, f: F, p: [F; N], best_f: F, best_p: [F; N]) {
match *self {
Status::None => (),
Status::Periodic { nk } => {
if k % nk == 0 {
println!(
"k: {k}\nt: {t:#?}:\ncurrent: {f:#?} at {p:#?}\nbest: {best_f:#?} at {best_p:#?}\n"
);
}
}
Status::Custom { f: ref mut fun } => fun(k, t, f, p, best_f, best_p),
}
}
}