509 spgInnerConsistentIn *in = (spgInnerConsistentIn *)PG_GETARG_POINTER(0);
510 spgInnerConsistentOut *out = (spgInnerConsistentOut *)PG_GETARG_POINTER(1);
512 MemoryContext old_ctx;
517 void **traversalValues;
522 out->nNodes = in->nNodes;
523 out->nodeNumbers = (
int *)palloc(
sizeof(
int) * in->nNodes);
524 for (i = 0; i < in->nNodes; i++)
525 out->nodeNumbers[i] = i;
534 if (in->traversalValue)
535 cube_box = in->traversalValue;
539 centroid = DatumGetBox3DP(in->prefixDatum);
543 nodeNumbers = (
int *)palloc(
sizeof(
int) * in->nNodes);
544 traversalValues = (
void **)palloc(
sizeof(
void *) * in->nNodes);
551 old_ctx = MemoryContextSwitchTo(in->traversalMemoryContext);
553 for (octant = 0; octant < in->nNodes; octant++)
558 for (i = 0; i < in->nkeys; i++)
560 StrategyNumber strategy = in->scankeys[i].sk_strategy;
561 Datum query = in->scankeys[i].sk_argument;
581 flag = !
right6D(next_cube_box, box);
589 flag = !
left6D(next_cube_box, box);
597 flag = !
below6D(next_cube_box, box);
605 flag = !
above6D(next_cube_box, box);
613 flag = !
front6D(next_cube_box, box);
621 flag = !
back6D(next_cube_box, box);
625 elog(ERROR,
"unrecognized strategy: %d", strategy);
635 traversalValues[out->nNodes] = next_cube_box;
636 nodeNumbers[out->nNodes] = octant;
645 pfree(next_cube_box);
650 out->nodeNumbers = (
int *)palloc(
sizeof(
int) * out->nNodes);
651 out->traversalValues = (
void **)palloc(
sizeof(
void *) * out->nNodes);
652 for (i = 0; i < out->nNodes; i++)
654 out->nodeNumbers[i] = nodeNumbers[i];
655 out->traversalValues[i] = traversalValues[i];
658 pfree(traversalValues);
661 MemoryContextSwitchTo(old_ctx);
static bool front6D(CubeBox3D *cube_box, BOX3D *query)
static bool back6D(CubeBox3D *cube_box, BOX3D *query)
static bool right6D(CubeBox3D *cube_box, BOX3D *query)
static bool overBack6D(CubeBox3D *cube_box, BOX3D *query)
static bool overAbove6D(CubeBox3D *cube_box, BOX3D *query)
static bool overlap6D(CubeBox3D *cube_box, BOX3D *query)
static CubeBox3D * nextCubeBox3D(CubeBox3D *cube_box, BOX3D *centroid, uint8 octant)
static bool overRight6D(CubeBox3D *cube_box, BOX3D *query)
static bool overFront6D(CubeBox3D *cube_box, BOX3D *query)
static CubeBox3D * initCubeBox(void)
static bool contain6D(CubeBox3D *cube_box, BOX3D *query)
static bool overBelow6D(CubeBox3D *cube_box, BOX3D *query)
static bool above6D(CubeBox3D *cube_box, BOX3D *query)
static bool below6D(CubeBox3D *cube_box, BOX3D *query)
static bool overLeft6D(CubeBox3D *cube_box, BOX3D *query)
static bool left6D(CubeBox3D *cube_box, BOX3D *query)
#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)
Datum centroid(PG_FUNCTION_ARGS)