PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ 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)
Definition: lwgeom_box3d.c:390
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: