]> git.itanic.dy.fi Git - sdl-planets/commitdiff
some more debug
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Sun, 14 Nov 2010 17:34:01 +0000 (19:34 +0200)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Sun, 14 Nov 2010 17:34:01 +0000 (19:34 +0200)
quadtree.c

index 721435dbc3a0fb65732aef63eff22970f38b28b4..b84da4a32d5b2572e8dee6449f9b1bddd0fa8a0e 100644 (file)
@@ -3,15 +3,18 @@
 
 #include "quadtree.h"
 
-static void trap(void)
+static void _trap(int line)
 {
        if (debug) {
-               printf("Trapped, use debugger to get backtrace\n");
+               printf("Trapped from line %d, use debugger to get backtrace\n",
+                       line);
                fflush(stdout);
                exit(1);
        }
 }
 
+#define trap() _trap(__LINE__)
+
 static int quadtree_compare_coord(const struct vector *a,
                                const struct vector *b)
 {
@@ -470,12 +473,15 @@ static int optimally_move_tree(struct quadtree *tree, struct quadtree *parent,
         * one
         */
        if (t == tree) {
+               printf("t == tree\n");
                ret = quadtree_compare_coord(&tree->pos, &mid);
 
                if (tree->child[ret]) {
                        t = quadtree_find_nearest(tree->child[ret], &mid,
                                                corner_orig);
                } else {
+                       printf("Second nearest not found in direction %d\n",
+                               ret);
                        /*
                         * No suitable match from the right
                         * direction. Try to find a second nearest
@@ -500,6 +506,8 @@ static int optimally_move_tree(struct quadtree *tree, struct quadtree *parent,
 
                                        vector_sub(&mid, &t->pos, &sub);
                                        dist = vector_abs(&sub);
+                                       printf("Setting nearest from %d\n", i);
+                                       continue;
                                }
                                node = quadtree_find_nearest(tree->child[i],
                                                        &mid, corner_orig);
@@ -514,6 +522,7 @@ static int optimally_move_tree(struct quadtree *tree, struct quadtree *parent,
                                        t = node;
                                        dist = dist2;
                                }
+                               printf("Re-setting nearest from %d\n", i);
                        }
 
                        if (t == NULL)
@@ -546,47 +555,28 @@ static int optimally_move_tree(struct quadtree *tree, struct quadtree *parent,
 
        corner[0] = corner_orig[0];
        corner[1] = corner_orig[1];
-       if (quadtree_split_by_node(t, corner, QUADTREE_UPLEFT)) {
+       if (quadtree_split_by_node(t, corner, QUADTREE_UPLEFT))
                moved += optimally_move_tree(tree, parent, corner, ops);
 
-               tmp = quadtree_find_nearest(tree, &t->pos, corner);
-               if (tmp && tmp != t)
-                       trap();
-
-       }
-
        corner[0] = corner_orig[0];
        corner[1] = corner_orig[1];
-       if (quadtree_split_by_node(t, corner, QUADTREE_UPRIGHT)) {
+       if (quadtree_split_by_node(t, corner, QUADTREE_UPRIGHT))
                moved += optimally_move_tree(tree, parent, corner, ops);
 
-               tmp = quadtree_find_nearest(tree, &t->pos, corner);
-               if (tmp && tmp != t)
-                       trap();
-
-       }
-
        corner[0] = corner_orig[0];
        corner[1] = corner_orig[1];
-       if (quadtree_split_by_node(t, corner, QUADTREE_DOWNLEFT)) {
+       if (quadtree_split_by_node(t, corner, QUADTREE_DOWNLEFT))
                moved += optimally_move_tree(tree, parent, corner, ops);
 
-               tmp = quadtree_find_nearest(tree, &t->pos, corner);
-               if (tmp && tmp != t)
-                       trap();
-
-       }
-
        corner[0] = corner_orig[0];
        corner[1] = corner_orig[1];
-       if (quadtree_split_by_node(t, corner, QUADTREE_DOWNRIGHT)) {
+       if (quadtree_split_by_node(t, corner, QUADTREE_DOWNRIGHT))
                moved += optimally_move_tree(tree, parent, corner, ops);
 
-               tmp = quadtree_find_nearest(tree, &t->pos, corner);
-               if (tmp && tmp != t)
-                       trap();
-
-       }
+       get_middle_point(corner_orig, &mid);
+       tmp = quadtree_find_nearest(tree, &mid, corner_orig);
+       if (tmp && tmp != tree)
+               trap();
 
 out:
        if (debug)
@@ -678,6 +668,7 @@ struct quadtree *quadtree_del(struct quadtree *node,
                if (moved != children) {
                        printf("Got %d children but %d were moved\n",
                                children, moved);
+                       fflush(stdout);
                        trap();
                }
                printf("Delete done, returning parent %p\n", parent);