Bläddra i källkod

r.li.daemon: add avlID_destroy

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@59044 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 11 år sedan
förälder
incheckning
12314bdd73
3 ändrade filer med 26 tillägg och 1 borttagningar
  1. 0 1
      raster/r.li/r.li.daemon/avl.c
  2. 25 0
      raster/r.li/r.li.daemon/avlID.c
  3. 1 0
      raster/r.li/r.li.daemon/avlID.h

+ 0 - 1
raster/r.li/r.li.daemon/avl.c

@@ -81,7 +81,6 @@ void avl_destroy(avl_tree root)
 	    save->right_child = it;
 	}
     }
-    
 }
 
 long howManyCell(const avl_tree root, const generic_cell k)

+ 25 - 0
raster/r.li/r.li.daemon/avlID.c

@@ -49,6 +49,31 @@ avlID_tree avlID_make(const long k, const long n)
     return root;
 }
 
+void avlID_destroy(avlID_tree root)
+{
+    struct avlID_node *it;
+    struct avlID_node *save = root;
+
+    /*
+    Rotate away the left links so that
+    we can treat this like the destruction
+    of a linked list
+    */
+    while((it = save) != NULL) {
+	if (it->left_child == NULL) {
+	    /* No left links, just kill the node and move on */
+	    save = it->right_child;
+	    G_free(it);
+	    it = NULL;
+	}
+	else {
+	    /* Rotate away the left link and check again */
+	    save = it->left_child;
+	    it->left_child = save->right_child;
+	    save->right_child = it;
+	}
+    }
+}
 
 long howManyID(const avlID_tree root, const long k)
 {

+ 1 - 0
raster/r.li/r.li.daemon/avlID.h

@@ -29,6 +29,7 @@ typedef avlID_tableRow *avlID_table;
 
 /* prototype of functions */
 avlID_tree avlID_make(const long k, const long n);
+void avlID_destroy(avlID_tree root);
 avlID_node *avlID_find(const avlID_tree root, const long k);
 int avlID_add(avlID_tree * root, const long k, const long n);
 long avlID_to_array(avlID_node * root, long i, avlID_table * a);