PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ 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: