static void recalculate_parent_area_stats(struct quadtree *node)
{
+ struct vector old_corner[2];
+
while (node) {
+ memcpy(&old_corner, &node->corner, sizeof(old_corner));
+
_recalculate_node_area_stats(node);
- node = node->parent;
+ /*
+ * Stop propagating the changes up in the tree if
+ * nothing has changed
+ */
+ if (memcmp(&old_corner, &node->corner, sizeof(old_corner)))
+ node = node->parent;
+ else
+ node = NULL;
}
}