use crate::equation::{EquationProblem, EvaluateResult};
use twine_core::model::Model;
use super::Bracket;
pub enum Event<'a, M, P>
where
M: Model,
P: EquationProblem<1, Input = M::Input, Output = M::Output>,
{
Left {
x: f64,
result: &'a EvaluateResult<M, P, 1>,
},
Right {
x: f64,
result: &'a EvaluateResult<M, P, 1>,
},
Midpoint {
x: f64,
bracket: &'a Bracket,
result: &'a EvaluateResult<M, P, 1>,
},
}
impl<'a, M, P> Event<'a, M, P>
where
M: Model,
P: EquationProblem<1, Input = M::Input, Output = M::Output>,
{
#[must_use]
pub fn x(&self) -> f64 {
match self {
Event::Left { x, .. } | Event::Right { x, .. } | Event::Midpoint { x, .. } => *x,
}
}
pub fn result(&self) -> &'a EvaluateResult<M, P, 1> {
match self {
Event::Left { result, .. }
| Event::Right { result, .. }
| Event::Midpoint { result, .. } => result,
}
}
}