aboutsummaryrefslogtreecommitdiffstats
path: root/src/intervals.c
diff options
context:
space:
mode:
authorRichard M. Stallman1998-02-16 23:46:08 +0000
committerRichard M. Stallman1998-02-16 23:46:08 +0000
commitcc6e2aaa2ae4f98baa4f450f4732f36e9a5c4061 (patch)
tree21ae79b7b227dc532f86170e965aa187f5fa7593 /src/intervals.c
parentab2d0cdb53b226e63c02730231a271312e940e12 (diff)
downloademacs-cc6e2aaa2ae4f98baa4f450f4732f36e9a5c4061.tar.gz
emacs-cc6e2aaa2ae4f98baa4f450f4732f36e9a5c4061.zip
(split_interval_right): Make sure to call
balance_possible_root_interval in case an interval doesn't have a right child, because otherwise the interval tree might degenerate into a list. (split_interval_left): Ditto if an interval hasn't a left child.
Diffstat (limited to 'src/intervals.c')
-rw-r--r--src/intervals.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/intervals.c b/src/intervals.c
index 7bfdfa47c25..68561e1c892 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -478,17 +478,17 @@ split_interval_right (interval, offset)
478 { 478 {
479 interval->right = new; 479 interval->right = new;
480 new->total_length = new_length; 480 new->total_length = new_length;
481
482 return new;
483 } 481 }
484 482 else
485 /* Insert the new node between INTERVAL and its right child. */ 483 {
486 new->right = interval->right; 484 /* Insert the new node between INTERVAL and its right child. */
487 interval->right->parent = new; 485 new->right = interval->right;
488 interval->right = new; 486 interval->right->parent = new;
489 new->total_length = new_length + new->right->total_length; 487 interval->right = new;
490 488 new->total_length = new_length + new->right->total_length;
491 balance_an_interval (new); 489 balance_an_interval (new);
490 }
491
492 balance_possible_root_interval (interval); 492 balance_possible_root_interval (interval);
493 493
494 return new; 494 return new;
@@ -524,17 +524,17 @@ split_interval_left (interval, offset)
524 { 524 {
525 interval->left = new; 525 interval->left = new;
526 new->total_length = new_length; 526 new->total_length = new_length;
527
528 return new;
529 } 527 }
530 528 else
531 /* Insert the new node between INTERVAL and its left child. */ 529 {
532 new->left = interval->left; 530 /* Insert the new node between INTERVAL and its left child. */
533 new->left->parent = new; 531 new->left = interval->left;
534 interval->left = new; 532 new->left->parent = new;
535 new->total_length = new_length + new->left->total_length; 533 interval->left = new;
536 534 new->total_length = new_length + new->left->total_length;
537 balance_an_interval (new); 535 balance_an_interval (new);
536 }
537
538 balance_possible_root_interval (interval); 538 balance_possible_root_interval (interval);
539 539
540 return new; 540 return new;