remove allocations from _next_composite
This commit is contained in:
parent
0748b30593
commit
e3df6e523e
@ -47,15 +47,30 @@ enum EvalTree<'a> {
|
||||
|
||||
type Oet<'a> = Option<EvalTree<'a>>;
|
||||
|
||||
struct Temp;
|
||||
|
||||
impl Atom for Temp {
|
||||
fn next<'t>(self: Box<Self>) -> Oet<'t>
|
||||
where
|
||||
Self: 't,
|
||||
{
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> EvalTree<'a> {
|
||||
fn _next_composite(self, other: Box<Self>) -> Self {
|
||||
match self {
|
||||
fn _next_composite(mut self: Box<Self>, other: Box<Self>) -> Self {
|
||||
match *self {
|
||||
Self::Atom(f) => match f.next() {
|
||||
Some(newleft) => Self::Composite(Box::new(newleft), other),
|
||||
Some(newleft) => {
|
||||
*self = newleft;
|
||||
Self::Composite(self, other)
|
||||
}
|
||||
None => *other,
|
||||
},
|
||||
Self::Composite(etll, etlr) => {
|
||||
Self::Composite(etll, Box::new(Self::Composite(etlr, other)))
|
||||
*self = Self::Composite(etlr, other);
|
||||
Self::Composite(etll, self)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user