simplify EvalTree::next

This commit is contained in:
AF 2023-08-01 20:07:59 +00:00
parent 37263f983a
commit 0748b30593

View File

@ -48,18 +48,22 @@ enum EvalTree<'a> {
type Oet<'a> = Option<EvalTree<'a>>; type Oet<'a> = Option<EvalTree<'a>>;
impl<'a> EvalTree<'a> { impl<'a> EvalTree<'a> {
fn _next_composite(self, other: Box<Self>) -> Self {
match self {
Self::Atom(f) => match f.next() {
Some(newleft) => Self::Composite(Box::new(newleft), other),
None => *other,
},
Self::Composite(etll, etlr) => {
Self::Composite(etll, Box::new(Self::Composite(etlr, other)))
}
}
}
fn next(self) -> Oet<'a> { fn next(self) -> Oet<'a> {
match self { match self {
Self::Atom(f) => f.next(), Self::Atom(f) => f.next(),
Self::Composite(etl, etr) => match *etl { Self::Composite(etl, etr) => Some(etl._next_composite(etr)),
Self::Atom(f) => match f.next() {
Some(newleft) => Some(Self::Composite(Box::new(newleft), etr)),
None => Some(*etr),
},
Self::Composite(etll, etlr) => {
Some(Self::Composite(etll, Box::new(Self::Composite(etlr, etr))))
}
},
} }
} }
} }