]> git.mdlowis.com Git - projs/libcds.git/commitdiff
remove symmetrical redundancy from rotation function
authora bellenir <a@bellenir.com>
Thu, 14 Aug 2014 06:11:52 +0000 (06:11 +0000)
committera bellenir <a@bellenir.com>
Thu, 14 Aug 2014 06:11:52 +0000 (06:11 +0000)
source/rbt/rbt.c

index 6f76709a335a0f2c0c4aabe93b0af198eb2244cf..533c3b556fc70455d3aeb50902f5ae73c83fbe58 100644 (file)
@@ -78,19 +78,15 @@ typedef enum {
 static void rotate(rbt_t* tree, rbt_node_t* node, direction_t direction){
        rbt_node_t* edon = (direction == LEFT) ? node->right : node->left;
        if(edon){
+               rbt_node_t** edon_side = (direction == LEFT ? &(edon->left) : &(edon->right));
+               rbt_node_t** node_side = (direction == LEFT ? &(node->right) : &(node->left));
                if(NULL == node->parent) tree->root = edon;
                else if(node->parent->left == node) node->parent->left = edon;
                else node->parent->right = edon;
                edon->parent = node->parent;
-               if(direction == LEFT){
-                       node->right = edon->left; //safe to overwrite node->right : is edon
-                       if(edon->left) edon->left->parent = node;
-                       edon->left = node;
-               } else { //mirror of above
-                       node->left = edon->right; //safe to overwrite node->left : is edon
-                       if(edon->right) edon->right->parent = node;
-                       edon->right = node;
-               }
+               *node_side = *edon_side; //safe to overwrite; points to edon
+               if(*edon_side) (*edon_side)->parent = node;
+               *edon_side = node;
                node->parent = edon;
        } /* else rotation isn't allowed */
 }