use crate::{
dde::DDE,
error::Error,
stats::Evals,
status::Status,
traits::{Real, State},
};
pub trait DelayNumericalMethod<const L: usize, T, Y, H>
where
T: Real,
Y: State<T>,
H: Fn(T) -> Y,
{
fn init<F>(&mut self, dde: &F, t0: T, tf: T, y0: &Y, phi: &H) -> Result<Evals, Error<T, Y>>
where
F: DDE<L, T, Y>;
fn step<F>(&mut self, dde: &F, phi: &H) -> Result<Evals, Error<T, Y>>
where
F: DDE<L, T, Y>;
fn t(&self) -> T;
fn y(&self) -> &Y;
fn t_prev(&self) -> T;
fn y_prev(&self) -> &Y;
fn h(&self) -> T;
fn set_h(&mut self, h: T);
fn status(&self) -> &Status<T, Y>;
fn set_status(&mut self, status: Status<T, Y>);
}