refactor: factor out function aquisition
This commit is contained in:
parent
69d8d111ba
commit
3745b655ba
1 changed files with 21 additions and 15 deletions
|
|
@ -41,7 +41,7 @@ fn collapse_toplevel(nodes: &mut Vec<Node>, mut end: usize) -> Result<(), Error>
|
||||||
.rposition(|n| *n == Node::ParenthesisStart)
|
.rposition(|n| *n == Node::ParenthesisStart)
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
|
|
||||||
while let Some((index, variant)) = nodes[start..end]
|
while let Some((index, function)) = nodes[start..end]
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter_map(|(i, n)| match n {
|
.filter_map(|(i, n)| match n {
|
||||||
|
|
@ -58,20 +58,7 @@ fn collapse_toplevel(nodes: &mut Vec<Node>, mut end: usize) -> Result<(), Error>
|
||||||
return Err(Error::MissingArgument(node.clone()));
|
return Err(Error::MissingArgument(node.clone()));
|
||||||
};
|
};
|
||||||
|
|
||||||
match variant {
|
function.for_float()(n);
|
||||||
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(),
|
|
||||||
};
|
|
||||||
|
|
||||||
nodes.remove(start + index);
|
nodes.remove(start + index);
|
||||||
end -= 1;
|
end -= 1;
|
||||||
|
|
@ -185,6 +172,25 @@ fn collapse_toplevel(nodes: &mut Vec<Node>, mut end: usize) -> Result<(), Error>
|
||||||
Ok(())
|
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)]
|
#[cfg(test)]
|
||||||
use super::PREC;
|
use super::PREC;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue