Commit f806c191 authored by Tom Lane's avatar Tom Lane

Simplify box_overlap computations.

Given the assumption that a box's high coordinates are not less than its
low coordinates, the tests in box_ov() are overly complicated and can be
reduced to about half as much work.  Since many other functions in
geo_ops.c rely on that assumption, there doesn't seem to be a good reason
not to use it here.

Per discussion of Alexander Korotkov's GiST fix, which was already using
the simplified logic (in a non-fuzzy form, but the equivalence holds just
as well for fuzzy).
parent 3c29b196
...@@ -558,15 +558,10 @@ box_overlap(PG_FUNCTION_ARGS) ...@@ -558,15 +558,10 @@ box_overlap(PG_FUNCTION_ARGS)
static bool static bool
box_ov(BOX *box1, BOX *box2) box_ov(BOX *box1, BOX *box2)
{ {
return ((FPge(box1->high.x, box2->high.x) && return (FPle(box1->low.x, box2->high.x) &&
FPle(box1->low.x, box2->high.x)) || FPle(box2->low.x, box1->high.x) &&
(FPge(box2->high.x, box1->high.x) && FPle(box1->low.y, box2->high.y) &&
FPle(box2->low.x, box1->high.x))) FPle(box2->low.y, box1->high.y));
&&
((FPge(box1->high.y, box2->high.y) &&
FPle(box1->low.y, box2->high.y)) ||
(FPge(box2->high.y, box1->high.y) &&
FPle(box2->low.y, box1->high.y)));
} }
/* box_left - is box1 strictly left of box2? /* box_left - is box1 strictly left of box2?
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment