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

◆ nextCubeBox()

static CubeGIDX * nextCubeBox ( CubeGIDX cube_box,
GIDX *  centroid,
uint16_t  octant 
)
static

Definition at line 187 of file gserialized_spgist_nd.c.

188{
189 int ndims = GIDX_NDIMS(centroid), i;
190 CubeGIDX *next_cube_box = (CubeGIDX *)palloc(sizeof(CubeGIDX));
191 GIDX *left = (GIDX *)palloc(GIDX_SIZE(ndims));
192 GIDX *right = (GIDX *)palloc(GIDX_SIZE(ndims));
193 uint16_t dim = 0x01;
194
195 memcpy(left, cube_box->left, VARSIZE(cube_box->left));
196 memcpy(right, cube_box->right, VARSIZE(cube_box->right));
197 next_cube_box->left = left;
198 next_cube_box->right = right;
199
200 for (i = 0; i < ndims; i++)
201 {
202 if (GIDX_GET_MAX(cube_box->left, i) != FLT_MAX && GIDX_GET_MAX(centroid, i) != FLT_MAX)
203 {
204 if (octant & dim)
205 GIDX_GET_MIN(next_cube_box->right, i) = GIDX_GET_MAX(centroid, i);
206 else
207 GIDX_GET_MAX(next_cube_box->right, i) = GIDX_GET_MAX(centroid, i);
208
209 dim = dim << 1;
210
211 if (octant & dim)
212 GIDX_GET_MIN(next_cube_box->left, i) = GIDX_GET_MIN(centroid, i);
213 else
214 GIDX_GET_MAX(next_cube_box->left, i) = GIDX_GET_MIN(centroid, i);
215
216 dim = dim << 1;
217 }
218 }
219
220 return next_cube_box;
221}
Datum centroid(PG_FUNCTION_ARGS)

References centroid(), CubeGIDX::left, and CubeGIDX::right.

Referenced by gserialized_spgist_inner_consistent_nd().

Here is the call graph for this function:
Here is the caller graph for this function: