static void trap(void)
{
- if (debug)
+ if (debug) {
+ printf("Trapped, use debugger to get backtrace\n");
exit(1);
+ }
}
static void validate_subtree(const struct quadtree *node)
static void validate_tree(const struct quadtree *node)
{
- if (debug)
- validate_subtree(quadtree_find_parent(node));
+ int i;
+
+ if (!debug)
+ return;
+
+ if (!node->parent)
+ return validate_subtree(node);
+
+ for (i = 0; i < 4; i++)
+ if (node->parent->child[i] == node)
+ break;
+
+ if (i == 4) {
+ printf("%s:%d Tree inconsistency detected! Wrong parent\n",
+ __func__, __LINE__);
+ fflush(stdout);
+ trap();
+ }
+
+ validate_tree(node->parent);
}
static int quadtree_compare_coord(struct vector *a, struct vector *b)
if (debug) {
printf("Relocating node %p under parent %p\n", t, parent);
- printf("There are %d child nodes left\n", tree->children);
+ printf("There are %ld child nodes left\n", tree->children);
fflush(stdout);
}
_quadtree_del(t, tree);
}
out:
- parent = quadtree_find_parent(parent);
validate_tree(parent);
- return parent;
+ return quadtree_find_parent(parent);
}