]> git.itanic.dy.fi Git - sdl-planets/blobdiff - quadtree.c
Move quadtree comparison code inside quadtree.c
[sdl-planets] / quadtree.c
index 61a26997c1555a7ee5c3419633d67164051bee28..10c4ec86f3ec3d93baae1b9543e578516c3922c3 100644 (file)
@@ -99,22 +99,29 @@ static void validate_tree(const struct quadtree *node)
                validate_subtree(quadtree_find_parent(node));
 }
 
+static int quadtree_compare(struct quadtree *a, struct quadtree *b)
+{
+       int up, left;
+
+       up = b->pos.y < a->pos.y;
+       left = b->pos.x < a->pos.x;
+
+       if (up && left)
+               return 0;
+       if (up && !left)
+               return 1;
+       if (left)
+               return 2;
+       return 3;
+}
+
 /**
  * quadtree_add - add a node to a quadtree
  * @parent: parent node
  * @new: the new node to be added
- * @compare: pointer to a comparison function
  *
  * Add a node to a quadtree. The tree is kept in order, the new node
- * is placed in the end of appropriate branch. The compare function is
- * used to compare the new node against a branch in the tree. The
- * comparison function must have following return value depending on
- * the position of node a compared to the position of node b:
- *
- * 0: upper left
- * 1: upper right
- * 2: lower left
- * 3: lower right
+ * is placed in the end of appropriate branch.
  *
  * The case of nodes sharing identical coordinates is not taken into
  * account at all.
@@ -129,7 +136,7 @@ struct quadtree *quadtree_add(struct quadtree *parent, struct quadtree *new,
 
        validate_tree(parent);
 
-       ret = ops->compare(parent, new);
+       ret = quadtree_compare(parent, new);
 
        if (ret < 0 || ret >= 4) {
                printf("Invalid comparison result of %d\n", ret);