From: Mukund Sivaraman Date: Mon, 2 Sep 2013 10:35:19 +0000 (+0530) Subject: [2750] Remove redundant condition to check if sibling is black X-Git-Tag: bind10-1.2.0beta1-release~193^2~4^2~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4ee1f3305b8704b7c5da130e163285bbfcbf36d7;p=thirdparty%2Fkea.git [2750] Remove redundant condition to check if sibling is black Add appropriate pre-condition assertions. --- diff --git a/src/lib/datasrc/memory/domaintree.h b/src/lib/datasrc/memory/domaintree.h index c91fecd07a..6c8696f6fd 100644 --- a/src/lib/datasrc/memory/domaintree.h +++ b/src/lib/datasrc/memory/domaintree.h @@ -2793,32 +2793,34 @@ DomainTree::removeRebalance } } - if (sibling->isBlack()) { - DomainTreeNode* ss1 = sibling->getLeft(); - DomainTreeNode* ss2 = sibling->getRight(); + // NOTE #3 and NOTE #4 asserted above still hold here. + assert(DomainTreeNode::isBlack(sibling)); + assert(sibling); - if (parent->getLeft() != child) { - std::swap(ss1, ss2); - } + DomainTreeNode* ss1 = sibling->getLeft(); + DomainTreeNode* ss2 = sibling->getRight(); - if (DomainTreeNode::isRed(ss1) && - DomainTreeNode::isBlack(ss2)) - { - sibling->setColor(DomainTreeNode::RED); - if (ss1) { - ss1->setColor(DomainTreeNode::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::isRed(ss1) && + DomainTreeNode::isBlack(ss2)) + { + sibling->setColor(DomainTreeNode::RED); + if (ss1) { + ss1->setColor(DomainTreeNode::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()) {