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