PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ gidx_union_edge()

static float gidx_union_edge ( GIDX *  a,
GIDX *  b 
)
static

Definition at line 293 of file gserialized_gist_nd.c.

294 {
295  float result;
296  int i;
297  int ndims_a, ndims_b;
298 
299  POSTGIS_DEBUG(5, "entered function");
300 
301  if (!a && !b)
302  {
303  elog(ERROR, "gidx_union_edge received two null arguments");
304  return 0.0;
305  }
306 
307  if (!a || gidx_is_unknown(a))
308  return gidx_volume(b);
309 
310  if (!b || gidx_is_unknown(b))
311  return gidx_volume(a);
312 
313  if (gidx_is_unknown(a) && gidx_is_unknown(b))
314  return 0.0;
315 
316  /* Ensure 'a' has the most dimensions. */
318 
319  ndims_a = GIDX_NDIMS(a);
320  ndims_b = GIDX_NDIMS(b);
321 
322  /* Initialize with maximal length of first dimension. */
323  result = Max(GIDX_GET_MAX(a, 0), GIDX_GET_MAX(b, 0)) - Min(GIDX_GET_MIN(a, 0), GIDX_GET_MIN(b, 0));
324 
325  /* Add maximal length of remaining dimensions. */
326  for (i = 1; i < ndims_b; i++)
327  result += (Max(GIDX_GET_MAX(a, i), GIDX_GET_MAX(b, i)) - Min(GIDX_GET_MIN(a, i), GIDX_GET_MIN(b, i)));
328 
329  /* Add in dimensions of higher dimensional box. */
330  for (i = ndims_b; i < ndims_a; i++)
331  result += (GIDX_GET_MAX(a, i) - GIDX_GET_MIN(a, i));
332 
333  POSTGIS_DEBUGF(5, "edge( %s union %s ) = %.12g", gidx_to_string(a), gidx_to_string(b), result);
334 
335  return result;
336 }
bool gidx_is_unknown(const GIDX *a)
static float gidx_volume(GIDX *a)
static void gidx_dimensionality_check(GIDX **a, GIDX **b)

References gidx_dimensionality_check(), gidx_is_unknown(), and gidx_volume().

Referenced by gserialized_gist_penalty().

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