Datum gbt_intv_penalty(PG_FUNCTION_ARGS) { intvKEY *origentry = (intvKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); intvKEY *newentry = (intvKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); double iorg[2], inew[2]; iorg[0] = intr2num(&origentry->lower); iorg[1] = intr2num(&origentry->upper); inew[0] = intr2num(&newentry->lower); inew[1] = intr2num(&newentry->upper); penalty_num(result, iorg[0], iorg[1], inew[0], inew[1]); PG_RETURN_POINTER(result); }
static float8 gbt_intv_dist(const void *a, const void *b) { return (float8) Abs(intr2num((Interval *) a) - intr2num((Interval *) b)); }