@@ -526,8 +526,9 @@ pure fn each_reverse<K: Ord, V>(node: &Option<~TreeNode<K, V>>,
526
526
}
527
527
528
528
// Remove left horizontal link by rotating right
529
- fn skew < K : Ord , V > ( mut node : ~TreeNode < K , V > ) -> ~TreeNode < K , V > {
529
+ fn skew < K : Ord , V > ( node : ~TreeNode < K , V > ) -> ~TreeNode < K , V > {
530
530
if node. left . map_default ( false , |x| x. level == node. level ) {
531
+ let mut node = node;
531
532
let mut save = node. left . swap_unwrap ( ) ;
532
533
node. left <-> save. right ; // save.right now None
533
534
save. right = Some ( node) ;
@@ -539,9 +540,10 @@ fn skew<K: Ord, V>(mut node: ~TreeNode<K, V>) -> ~TreeNode<K, V> {
539
540
540
541
// Remove dual horizontal link by rotating left and increasing level of
541
542
// the parent
542
- fn split < K : Ord , V > ( mut node : ~TreeNode < K , V > ) -> ~TreeNode < K , V > {
543
+ fn split < K : Ord , V > ( node : ~TreeNode < K , V > ) -> ~TreeNode < K , V > {
543
544
if node. right . map_default ( false ,
544
545
|x| x. right . map_default ( false , |y| y. level == node. level ) ) {
546
+ let mut node = node;
545
547
let mut save = node. right . swap_unwrap ( ) ;
546
548
node. right <-> save. left ; // save.left now None
547
549
save. left = Some ( node) ;
@@ -580,7 +582,8 @@ fn remove<K: Ord, V>(node: &mut Option<~TreeNode<K, V>>, key: &K) -> bool {
580
582
fn heir_swap < K : Ord , V > ( node : & mut TreeNode < K , V > ,
581
583
child : & mut Option < ~TreeNode < K , V > > ) {
582
584
// *could* be done without recursion, but it won't borrow check
583
- do child. mutate |mut child| {
585
+ do child. mutate |child| {
586
+ let mut child = child;
584
587
if child. right . is_some ( ) {
585
588
heir_swap ( & mut * node, & mut child. right ) ;
586
589
} else {
@@ -633,13 +636,15 @@ fn remove<K: Ord, V>(node: &mut Option<~TreeNode<K, V>>, key: &K) -> bool {
633
636
save. level -= 1 ;
634
637
635
638
if right_level > save. level {
636
- do save. right . mutate |mut x| { x. level = save. level ; x }
639
+ do save. right . mutate |x| {
640
+ let mut x = x; x. level = save. level ; x
641
+ }
637
642
}
638
643
639
644
save = skew ( save) ;
640
645
641
- do save. right . mutate |mut right| {
642
- right = skew ( right) ;
646
+ do save. right . mutate |right| {
647
+ let mut right = skew ( right) ;
643
648
right. right . mutate ( skew) ;
644
649
right
645
650
}
0 commit comments