PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ gserialized_spgist_leaf_consistent_3d()

PGDLLEXPORT Datum gserialized_spgist_leaf_consistent_3d ( PG_FUNCTION_ARGS  )

Definition at line 671 of file gserialized_spgist_3d.c.

672{
673 spgLeafConsistentIn *in = (spgLeafConsistentIn *)PG_GETARG_POINTER(0);
674 spgLeafConsistentOut *out = (spgLeafConsistentOut *)PG_GETARG_POINTER(1);
675 BOX3D *leaf = DatumGetBox3DP(in->leafDatum);
676 bool flag = true;
677 int i;
678
679 /* All tests are exact. */
680 out->recheck = false;
681
682 /* leafDatum is what it is... */
683 out->leafValue = in->leafDatum;
684
685 /* Perform the required comparison(s) */
686 for (i = 0; i < in->nkeys; i++)
687 {
688 StrategyNumber strategy = in->scankeys[i].sk_strategy;
689 Datum query = in->scankeys[i].sk_argument;
690 BOX3D *box = DatumGetBox3DP(DirectFunctionCall1(LWGEOM_to_BOX3D, query));
691
692 switch (strategy)
693 {
695 flag = BOX3D_overlaps_internal(leaf, box);
696 break;
697
699 flag = BOX3D_contains_internal(leaf, box);
700 break;
701
703 flag = BOX3D_contained_internal(leaf, box);
704 break;
705
707 flag = BOX3D_same_internal(leaf, box);
708 break;
709
711 flag = BOX3D_left_internal(leaf, box);
712 break;
713
715 flag = BOX3D_overleft_internal(leaf, box);
716 break;
717
719 flag = BOX3D_right_internal(leaf, box);
720 break;
721
723 flag = BOX3D_overright_internal(leaf, box);
724 break;
725
727 flag = BOX3D_above_internal(leaf, box);
728 break;
729
731 flag = BOX3D_overabove_internal(leaf, box);
732 break;
733
735 flag = BOX3D_below_internal(leaf, box);
736 break;
737
739 flag = BOX3D_overbelow_internal(leaf, box);
740 break;
741
743 flag = BOX3D_back_internal(leaf, box);
744 break;
745
747 flag = BOX3D_overback_internal(leaf, box);
748 break;
749
751 flag = BOX3D_front_internal(leaf, box);
752 break;
753
755 flag = BOX3D_overfront_internal(leaf, box);
756 break;
757
758 default:
759 elog(ERROR, "unrecognized strategy: %d", strategy);
760 }
761
762 /* If any check is failed, we have found our answer. */
763 if (!flag)
764 break;
765 }
766
767 PG_RETURN_BOOL(flag);
768}
#define SPGOverlapStrategyNumber
#define SPGOverLeftStrategyNumber
#define SPGLeftStrategyNumber
#define SPGAboveStrategyNumber
#define SPGSameStrategyNumber
#define SPGOverBackStrategyNumber
#define SPGContainedByStrategyNumber
#define SPGOverRightStrategyNumber
#define SPGFrontStrategyNumber
#define SPGBelowStrategyNumber
#define SPGRightStrategyNumber
#define SPGOverFrontStrategyNumber
#define SPGContainsStrategyNumber
#define SPGOverBelowStrategyNumber
#define SPGBackStrategyNumber
#define SPGOverAboveStrategyNumber
bool BOX3D_above_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_back_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_overlaps_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_contains_internal(BOX3D *box1, BOX3D *box2)
Needed for SP-GiST support.
bool BOX3D_overabove_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_right_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_overback_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_overleft_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_below_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_left_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_overright_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_same_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_contained_internal(BOX3D *box1, BOX3D *box2)
Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS)
bool BOX3D_front_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_overfront_internal(BOX3D *box1, BOX3D *box2)
bool BOX3D_overbelow_internal(BOX3D *box1, BOX3D *box2)

References BOX3D_above_internal(), BOX3D_back_internal(), BOX3D_below_internal(), BOX3D_contained_internal(), BOX3D_contains_internal(), BOX3D_front_internal(), BOX3D_left_internal(), BOX3D_overabove_internal(), BOX3D_overback_internal(), BOX3D_overbelow_internal(), BOX3D_overfront_internal(), BOX3D_overlaps_internal(), BOX3D_overleft_internal(), BOX3D_overright_internal(), BOX3D_right_internal(), BOX3D_same_internal(), LWGEOM_to_BOX3D(), SPGAboveStrategyNumber, SPGBackStrategyNumber, SPGBelowStrategyNumber, SPGContainedByStrategyNumber, SPGContainsStrategyNumber, SPGFrontStrategyNumber, SPGLeftStrategyNumber, SPGOverAboveStrategyNumber, SPGOverBackStrategyNumber, SPGOverBelowStrategyNumber, SPGOverFrontStrategyNumber, SPGOverlapStrategyNumber, SPGOverLeftStrategyNumber, SPGOverRightStrategyNumber, SPGRightStrategyNumber, and SPGSameStrategyNumber.

Here is the call graph for this function: