BinaryTreesMutable::remove
This commit is contained in:
parent
b1a19cc9f5
commit
5858fbd897
@ -51,24 +51,23 @@ pub trait BinaryTreesMutable<'a>: BinaryTrees<'a> {
|
|||||||
<Self::T as Monad>::bind(self.clone().join_key(tl, key, tr), move |n| self.tree_of(n))
|
<Self::T as Monad>::bind(self.clone().join_key(tl, key, tr), move |n| self.tree_of(n))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn join(&self, tl: Self::Tree, tr: Self::Tree) -> BTWrap<'a, Self, Self::Tree> {
|
fn join(self, tl: Self::Tree, tr: Self::Tree) -> BTWrap<'a, Self, Self::Tree> {
|
||||||
let Some(rl) = self.refer(&tl) else {
|
let Some(rl) = self.refer(&tl) else {
|
||||||
return <Self::T as Pure>::pure(tr)
|
return <Self::T as Pure>::pure(tr)
|
||||||
};
|
};
|
||||||
let Some(rr) = self.refer(&tr) else {
|
let Some(rr) = self.refer(&tr) else {
|
||||||
return <Self::T as Pure>::pure(tl)
|
return <Self::T as Pure>::pure(tl)
|
||||||
};
|
};
|
||||||
let ctx = self.clone();
|
|
||||||
Self::T::bind2(self.resolve(&rl), self.resolve(&rr), move |nl, nr| {
|
Self::T::bind2(self.resolve(&rl), self.resolve(&rr), move |nl, nr| {
|
||||||
let (tll, tlr, kl) = ctx.split(&nl);
|
let (tll, tlr, kl) = self.split(&nl);
|
||||||
let (trl, trr, kr) = ctx.split(&nr);
|
let (trl, trr, kr) = self.split(&nr);
|
||||||
let ft = ctx.join(tlr, trl);
|
let ft = self.clone().join(tlr, trl);
|
||||||
let ft = {
|
let ft = {
|
||||||
let ctx = ctx.clone();
|
let ctx = self.clone();
|
||||||
<Self::T as Monad>::bind(ft, move |t| ctx.join_key_tree(tll, kl, t))
|
<Self::T as Monad>::bind(ft, move |t| ctx.join_key_tree(tll, kl, t))
|
||||||
};
|
};
|
||||||
let ft = {
|
let ft = {
|
||||||
let ctx = ctx.clone();
|
let ctx = self.clone();
|
||||||
<Self::T as Monad>::bind(ft, move |t| ctx.join_key_tree(t, kr, trr))
|
<Self::T as Monad>::bind(ft, move |t| ctx.join_key_tree(t, kr, trr))
|
||||||
};
|
};
|
||||||
ft
|
ft
|
||||||
@ -124,6 +123,12 @@ pub trait BinaryTreesMutable<'a>: BinaryTrees<'a> {
|
|||||||
fn add_tree(self, tree: Self::Tree, key: KeyRc<'a, Self>) -> BTWrap<'a, Self, Self::Tree> {
|
fn add_tree(self, tree: Self::Tree, key: KeyRc<'a, Self>) -> BTWrap<'a, Self, Self::Tree> {
|
||||||
<Self::T as Monad>::bind(self.clone().add(tree, key), move |n| self.tree_of(n))
|
<Self::T as Monad>::bind(self.clone().add(tree, key), move |n| self.tree_of(n))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn remove(self, tree: Self::Tree, key: KeyRc<'a, Self>) -> BTWrap<'a, Self, Self::Tree> {
|
||||||
|
<Self::T as Monad>::bind(self.clone().split_key(tree, key.clone()), |(tl, tr)| {
|
||||||
|
self.join(tl, tr)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait BinaryTreesAvl<'a>: BinaryTrees<'a> {
|
pub trait BinaryTreesAvl<'a>: BinaryTrees<'a> {
|
||||||
|
Loading…
Reference in New Issue
Block a user