PostGIS  2.1.10dev-r@@SVN_REVISION@@
static float gidx_inter_volume ( GIDX *  a,
GIDX *  b 
)
static

Definition at line 264 of file gserialized_gist_nd.c.

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

Referenced by gserialized_gist_picksplit_constructsplit().

265 {
266  int i;
267  float result;
268 
269  POSTGIS_DEBUG(5,"entered function");
270 
271  if ( a == NULL || b == NULL )
272  {
273  elog(ERROR, "gidx_inter_volume received a null argument");
274  return 0.0;
275  }
276 
277  if ( gidx_is_unknown(a) || gidx_is_unknown(b) )
278  {
279  return 0.0;
280  }
281 
282  /* Ensure 'a' has the most dimensions. */
284 
285  /* Initialize with minimal length of first dimension. */
286  result = Min(GIDX_GET_MAX(a,0),GIDX_GET_MAX(b,0)) - Max(GIDX_GET_MIN(a,0),GIDX_GET_MIN(b,0));
287 
288  /* If they are disjoint (max < min) then return zero. */
289  if ( result < 0.0 ) return 0.0;
290 
291  /* Continue for remaining dimensions. */
292  for ( i = 1; i < GIDX_NDIMS(b); i++ )
293  {
294  float width = Min(GIDX_GET_MAX(a,i),GIDX_GET_MAX(b,i)) - Max(GIDX_GET_MIN(a,i),GIDX_GET_MIN(b,i));
295  if ( width < 0.0 ) return 0.0;
296  /* Multiply by minimal length of remaining dimensions. */
297  result *= width;
298  }
299  POSTGIS_DEBUGF(5, "volume( %s intersection %s ) = %.12g", gidx_to_string(a), gidx_to_string(b), result);
300  return result;
301 }
static bool gidx_is_unknown(const GIDX *a)
char ** result
Definition: liblwgeom.h:218
static void gidx_dimensionality_check(GIDX **a, GIDX **b)

Here is the call graph for this function:

Here is the caller graph for this function: