]> git.itanic.dy.fi Git - sdl-planets/commitdiff
quadtree: Use the validator
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Mon, 5 Apr 2010 12:43:14 +0000 (15:43 +0300)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Mon, 5 Apr 2010 12:43:14 +0000 (15:43 +0300)
Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
quadtree.c

index 25b8ad63d8e7944c54cecc1ee733867c072f9684..a0ec4cebd3bad3ded394e08e658cf6dd4b2a27d4 100644 (file)
@@ -68,6 +68,10 @@ struct quadtree *quadtree_add(struct quadtree *parent,
                                             struct quadtree *b))
 {
        int ret;
+       if (parent == new)
+               trap();
+
+       validate_tree(parent);
 
        ret = compare(parent, new);
 
@@ -82,6 +86,8 @@ struct quadtree *quadtree_add(struct quadtree *parent,
        parent->child[ret] = new;
        new->parent = parent;
 
+       validate_tree(new);
+
        return new;
 }
 
@@ -98,11 +104,18 @@ _quadtree_reposition_reqursively(struct quadtree *root,
 {
        int i;
 
+       validate_tree(node);
+
        /* First remove all children, if any */
+
        for (i = 0; i < 4; i++) {
                if (!node->child[i])
                        continue;
 
+               if (node->child[i] == node ||
+                   node->child[i] == node->parent)
+                       trap();
+
                _quadtree_reposition_reqursively(root, node->child[i], compare);
                node->child[i] = 0;
        }
@@ -163,6 +176,7 @@ struct quadtree *quadtree_del(struct quadtree *node,
        parent = quadtree_find_parent(node);
        node->parent = 0;
 
+       validate_tree(parent);
        return parent;
 }