]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2750] Remove redundant condition to check if sibling is black
authorMukund Sivaraman <muks@isc.org>
Mon, 2 Sep 2013 10:35:19 +0000 (16:05 +0530)
committerMukund Sivaraman <muks@isc.org>
Mon, 2 Sep 2013 10:35:19 +0000 (16:05 +0530)
Add appropriate pre-condition assertions.

src/lib/datasrc/memory/domaintree.h

index c91fecd07a263861f6ff5448267ca4868b3d3613..6c8696f6fde65ef3473fa975d6a564040114e940 100644 (file)
@@ -2793,32 +2793,34 @@ DomainTree<T>::removeRebalance
             }
         }
 
-        if (sibling->isBlack()) {
-            DomainTreeNode<T>* ss1 = sibling->getLeft();
-            DomainTreeNode<T>* ss2 = sibling->getRight();
+        // NOTE #3 and NOTE #4 asserted above still hold here.
+        assert(DomainTreeNode<T>::isBlack(sibling));
+        assert(sibling);
 
-            if (parent->getLeft() != child) {
-                std::swap(ss1, ss2);
-            }
+        DomainTreeNode<T>* ss1 = sibling->getLeft();
+        DomainTreeNode<T>* ss2 = sibling->getRight();
 
-            if (DomainTreeNode<T>::isRed(ss1) &&
-                DomainTreeNode<T>::isBlack(ss2))
-            {
-                sibling->setColor(DomainTreeNode<T>::RED);
-                if (ss1) {
-                    ss1->setColor(DomainTreeNode<T>::BLACK);
-                }
+        if (parent->getLeft() != child) {
+            std::swap(ss1, ss2);
+        }
 
-                if (parent->getLeft() != child) {
-                    rightRotate(root_ptr, sibling);
-                } else {
-                    leftRotate(root_ptr, sibling);
-                }
-                // Re-compute child's sibling due to the tree adjustment
-                // above.
-                sibling = (parent->getLeft() == child) ?
-                    parent->getRight() : parent->getLeft();
+        if (DomainTreeNode<T>::isRed(ss1) &&
+            DomainTreeNode<T>::isBlack(ss2))
+        {
+            sibling->setColor(DomainTreeNode<T>::RED);
+            if (ss1) {
+                ss1->setColor(DomainTreeNode<T>::BLACK);
             }
+
+            if (parent->getLeft() != child) {
+                rightRotate(root_ptr, sibling);
+            } else {
+                leftRotate(root_ptr, sibling);
+            }
+            // Re-compute child's sibling due to the tree adjustment
+            // above.
+            sibling = (parent->getLeft() == child) ?
+                parent->getRight() : parent->getLeft();
         }
 
         if (parent->isRed()) {