From 3745b655ba30de0a30e773b94370141b744d15e6 Mon Sep 17 00:00:00 2001 From: electria Date: Tue, 6 Oct 2026 15:56:10 -0700 Subject: [PATCH] refactor: factor out function aquisition --- src/nodes/eval.rs | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/nodes/eval.rs b/src/nodes/eval.rs index cd37cb3..bc6dd6e 100644 --- a/src/nodes/eval.rs +++ b/src/nodes/eval.rs @@ -41,7 +41,7 @@ fn collapse_toplevel(nodes: &mut Vec, mut end: usize) -> Result<(), Error> .rposition(|n| *n == Node::ParenthesisStart) .unwrap_or(0); - while let Some((index, variant)) = nodes[start..end] + while let Some((index, function)) = nodes[start..end] .iter() .enumerate() .filter_map(|(i, n)| match n { @@ -58,20 +58,7 @@ fn collapse_toplevel(nodes: &mut Vec, mut end: usize) -> Result<(), Error> return Err(Error::MissingArgument(node.clone())); }; - match variant { - Function::Sqrt => n.sqrt_mut(), - - Function::Ln => n.ln_mut(), - - Function::Sine => n.sin_mut(), - Function::ArcSine => n.asin_mut(), - Function::Cosine => n.cos_mut(), - Function::ArcCosine => n.acos_mut(), - Function::Tangent => n.tan_mut(), - Function::ArcTangent => n.atan_mut(), - Function::Secant => n.sec_mut(), - Function::CoSecant => n.csc_mut(), - }; + function.for_float()(n); nodes.remove(start + index); end -= 1; @@ -185,6 +172,25 @@ fn collapse_toplevel(nodes: &mut Vec, mut end: usize) -> Result<(), Error> Ok(()) } +impl Function { + fn for_float(&self) -> impl FnMut(&mut Float) { + match self { + Function::Sqrt => Float::sqrt_mut, + + Function::Ln => Float::ln_mut, + + Function::Sine => Float::sin_mut, + Function::ArcSine => Float::asin_mut, + Function::Cosine => Float::cos_mut, + Function::ArcCosine => Float::acos_mut, + Function::Tangent => Float::tan_mut, + Function::ArcTangent => Float::atan_mut, + Function::Secant => Float::sec_mut, + Function::CoSecant => Float::csc_mut, + } + } +} + #[cfg(test)] use super::PREC;