summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2011-11-22 03:30:45 +0100
committerBenjamin Otte <otte@redhat.com>2011-11-22 03:32:56 +0100
commitae99a9e04a5c6ac22d0d0229244c373bc5875cc1 (patch)
tree8d1ca079092825a61e95a1162b21a0ff05f9cc4b /gtk
parent37786804e185534f35c289be695f0cb21d4a87b4 (diff)
downloadgtk+-ae99a9e04a5c6ac22d0d0229244c373bc5875cc1.tar.gz
rbtree: Simplify rotation functions
- Make sure the rotated nodes aren't nil - Use existing functions for complex computations - Don't use NULL checks for variables guaranteed to not be NULL/nil
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkrbtree.c86
1 files changed, 32 insertions, 54 deletions
diff --git a/gtk/gtkrbtree.c b/gtk/gtkrbtree.c
index a1f93f62b3..9b50a1747d 100644
--- a/gtk/gtkrbtree.c
+++ b/gtk/gtkrbtree.c
@@ -95,24 +95,20 @@ _gtk_rbnode_rotate_left (GtkRBTree *tree,
GtkRBNode *node)
{
gint node_height, right_height;
- GtkRBNode *right = node->right;
+ GtkRBNode *right;
g_return_if_fail (!_gtk_rbtree_is_nil (node));
+ g_return_if_fail (!_gtk_rbtree_is_nil (node->right));
- node_height = node->offset -
- (node->left?node->left->offset:0) -
- (node->right?node->right->offset:0) -
- (node->children?node->children->root->offset:0);
- right_height = right->offset -
- (right->left?right->left->offset:0) -
- (right->right?right->right->offset:0) -
- (right->children?right->children->root->offset:0);
+ right = node->right;
+
+ node_height = GTK_RBNODE_GET_HEIGHT (node);
+ right_height = GTK_RBNODE_GET_HEIGHT (right);
node->right = right->left;
if (!_gtk_rbtree_is_nil (right->left))
right->left->parent = node;
- if (!_gtk_rbtree_is_nil (right))
- right->parent = node->parent;
+ right->parent = node->parent;
if (!_gtk_rbtree_is_nil (node->parent))
{
if (node == node->parent->left)
@@ -124,22 +120,15 @@ _gtk_rbnode_rotate_left (GtkRBTree *tree,
}
right->left = node;
- if (!_gtk_rbtree_is_nil (node))
- node->parent = right;
-
- node->count = 1 + (node->left?node->left->count:0) +
- (node->right?node->right->count:0);
- right->count = 1 + (right->left?right->left->count:0) +
- (right->right?right->right->count:0);
-
- node->offset = node_height +
- (node->left?node->left->offset:0) +
- (node->right?node->right->offset:0) +
- (node->children?node->children->root->offset:0);
- right->offset = right_height +
- (right->left?right->left->offset:0) +
- (right->right?right->right->offset:0) +
- (right->children?right->children->root->offset:0);
+ node->parent = right;
+
+ node->count = 1 + node->left->count + node->right->count;
+ right->count = 1 + right->left->count + right->right->count;
+
+ node->offset = node_height + node->left->offset + node->right->offset +
+ (node->children ? node->children->root->offset : 0);
+ right->offset = right_height + right->left->offset + right->right->offset +
+ (right->children ? right->children->root->offset : 0);
_fixup_validation (tree, node);
_fixup_validation (tree, right);
@@ -152,25 +141,21 @@ _gtk_rbnode_rotate_right (GtkRBTree *tree,
GtkRBNode *node)
{
gint node_height, left_height;
- GtkRBNode *left = node->left;
+ GtkRBNode *left;
g_return_if_fail (!_gtk_rbtree_is_nil (node));
+ g_return_if_fail (!_gtk_rbtree_is_nil (node->left));
- node_height = node->offset -
- (node->left?node->left->offset:0) -
- (node->right?node->right->offset:0) -
- (node->children?node->children->root->offset:0);
- left_height = left->offset -
- (left->left?left->left->offset:0) -
- (left->right?left->right->offset:0) -
- (left->children?left->children->root->offset:0);
+ left = node->left;
+
+ node_height = GTK_RBNODE_GET_HEIGHT (node);
+ left_height = GTK_RBNODE_GET_HEIGHT (left);
node->left = left->right;
if (!_gtk_rbtree_is_nil (left->right))
left->right->parent = node;
- if (!_gtk_rbtree_is_nil (left))
- left->parent = node->parent;
+ left->parent = node->parent;
if (!_gtk_rbtree_is_nil (node->parent))
{
if (node == node->parent->right)
@@ -185,22 +170,15 @@ _gtk_rbnode_rotate_right (GtkRBTree *tree,
/* link node and left */
left->right = node;
- if (!_gtk_rbtree_is_nil (node))
- node->parent = left;
-
- node->count = 1 + (node->left?node->left->count:0) +
- (node->right?node->right->count:0);
- left->count = 1 + (left->left?left->left->count:0) +
- (left->right?left->right->count:0);
-
- node->offset = node_height +
- (node->left?node->left->offset:0) +
- (node->right?node->right->offset:0) +
- (node->children?node->children->root->offset:0);
- left->offset = left_height +
- (left->left?left->left->offset:0) +
- (left->right?left->right->offset:0) +
- (left->children?left->children->root->offset:0);
+ node->parent = left;
+
+ node->count = 1 + node->left->count + node->right->count;
+ left->count = 1 + left->left->count + left->right->count;
+
+ node->offset = node_height + node->left->offset + node->right->offset +
+ (node->children ? node->children->root->offset : 0);
+ left->offset = left_height + left->left->offset + left->right->offset +
+ (left->children?left->children->root->offset:0);
_fixup_validation (tree, node);
_fixup_validation (tree, left);