BIND 10 trac2105, updated. 2b062467de80d3fe2b3b255aed7f63a86ebd1d12 [2105] Add #2182 (deleteHelper changes) into DomainTree

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Aug 3 14:23:26 UTC 2012


The branch, trac2105 has been updated
       via  2b062467de80d3fe2b3b255aed7f63a86ebd1d12 (commit)
      from  13b16c09be05bd131dc7777e184035eed25e4617 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2b062467de80d3fe2b3b255aed7f63a86ebd1d12
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri Aug 3 19:47:50 2012 +0530

    [2105] Add #2182 (deleteHelper changes) into DomainTree

-----------------------------------------------------------------------

Summary of changes:
 src/lib/datasrc/memory/domaintree.h |   54 ++++++++++++++++-------------------
 1 file changed, 24 insertions(+), 30 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory/domaintree.h b/src/lib/datasrc/memory/domaintree.h
index dae1b89..ad8f085 100644
--- a/src/lib/datasrc/memory/domaintree.h
+++ b/src/lib/datasrc/memory/domaintree.h
@@ -1368,39 +1368,33 @@ DomainTree<T, DT>::~DomainTree() {
 template <typename T, typename DT>
 void
 DomainTree<T, DT>::deleteHelper(util::MemorySegment& mem_sgmt,
-                               DomainTreeNode<T, DT>* root,
-                               const DT& deleter) {
-    if (root == NULL) {
-        return;
-    }
-
-    DomainTreeNode<T, DT>* node = root;
-    while (root->getLeft() != NULL || root->getRight() != NULL) {
-        DomainTreeNode<T, DT>* left(NULL);
-        DomainTreeNode<T, DT>* right(NULL);
-        while ((left = node->getLeft()) != NULL ||
-               (right = node->getRight()) != NULL) {
-            node = (left != NULL) ? left : right;
-        }
-
-        DomainTreeNode<T, DT>* parent = node->getParent();
-        if (parent->getLeft() == node) {
-            parent->left_ = NULL;
+                                DomainTreeNode<T, DT>* root,
+                                const DT& deleter) {
+    while (root != NULL) {
+        // If there is a left, right or down node, walk into it and
+        // iterate.
+        if (root->getLeft() != NULL) {
+            DomainTreeNode<T, DT>* node = root;
+            root = root->getLeft();
+            node->left_ = NULL;
+        } else if (root->getRight() != NULL) {
+            DomainTreeNode<T, DT>* node = root;
+            root = root->getRight();
+            node->right_ = NULL;
+        } else if (root->getDown() != NULL) {
+            DomainTreeNode<T, DT>* node = root;
+            root = root->getDown();
+            node->down_ = NULL;
         } else {
-            parent->right_ = NULL;
+            // There are no left, right or down nodes, so we can
+            // free this one and go back to its parent.
+            DomainTreeNode<T, DT>* node = root;
+            root = root->getParent();
+            deleter(mem_sgmt, node->data_);
+            DomainTreeNode<T, DT>::destroy(mem_sgmt, node);
+            --node_count_;
         }
-
-        deleteHelper(mem_sgmt, node->getDown(), deleter);
-        deleter(mem_sgmt, node->data_);
-        DomainTreeNode<T, DT>::destroy(mem_sgmt, node);
-        --node_count_;
-        node = parent;
     }
-
-    deleteHelper(mem_sgmt, root->getDown(), deleter);
-    deleter(mem_sgmt, root->data_);
-    DomainTreeNode<T, DT>::destroy(mem_sgmt, root);
-    --node_count_;
 }
 
 template <typename T, typename DT>



More information about the bind10-changes mailing list