mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
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).
This commit is contained in:
@ -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?
|
||||||
|
Reference in New Issue
Block a user