PostGIS 3.0.6dev-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 670 of file gserialized_spgist_3d.c.

671{
672 spgLeafConsistentIn *in = (spgLeafConsistentIn *)PG_GETARG_POINTER(0);
673 spgLeafConsistentOut *out = (spgLeafConsistentOut *)PG_GETARG_POINTER(1);
674 BOX3D *leaf = DatumGetBox3DP(in->leafDatum);
675 bool flag = true;
676 int i;
677
678 /* All tests are exact. */
679 out->recheck = false;
680
681 /* leafDatum is what it is... */
682 out->leafValue = in->leafDatum;
683
684 /* Perform the required comparison(s) */
685 for (i = 0; i < in->nkeys; i++)
686 {
687 StrategyNumber strategy = in->scankeys[i].sk_strategy;
688 Datum query = in->scankeys[i].sk_argument;
689 BOX3D *box = DatumGetBox3DP(DirectFunctionCall1(LWGEOM_to_BOX3D, query));
690
691 switch (strategy)
692 {
694 flag = BOX3D_overlaps_internal(leaf, box);
695 break;
696
698 flag = BOX3D_contains_internal(leaf, box);
699 break;
700
702 flag = BOX3D_contained_internal(leaf, box);
703 break;
704
706 flag = BOX3D_same_internal(leaf, box);
707 break;
708
710 flag = BOX3D_left_internal(leaf, box);
711 break;
712
714 flag = BOX3D_overleft_internal(leaf, box);
715 break;
716
718 flag = BOX3D_right_internal(leaf, box);
719 break;
720
722 flag = BOX3D_overright_internal(leaf, box);
723 break;
724
726 flag = BOX3D_above_internal(leaf, box);
727 break;
728
730 flag = BOX3D_overabove_internal(leaf, box);
731 break;
732
734 flag = BOX3D_below_internal(leaf, box);
735 break;
736
738 flag = BOX3D_overbelow_internal(leaf, box);
739 break;
740
742 flag = BOX3D_back_internal(leaf, box);
743 break;
744
746 flag = BOX3D_overback_internal(leaf, box);
747 break;
748
750 flag = BOX3D_front_internal(leaf, box);
751 break;
752
754 flag = BOX3D_overfront_internal(leaf, box);
755 break;
756
757 default:
758 elog(ERROR, "unrecognized strategy: %d", strategy);
759 }
760
761 /* If any check is failed, we have found our answer. */
762 if (!flag)
763 break;
764 }
765
766 PG_RETURN_BOOL(flag);
767}
#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
Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS)
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)
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)
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: