1176{
1177 GISTENTRY *origentry = (GISTENTRY *)PG_GETARG_POINTER(0);
1178 GISTENTRY *newentry = (GISTENTRY *)PG_GETARG_POINTER(1);
1179 float *result = (float *)PG_GETARG_POINTER(2);
1180 GIDX *gbox_index_orig, *gbox_index_new;
1181
1182 gbox_index_orig = (GIDX *)DatumGetPointer(origentry->key);
1183 gbox_index_new = (GIDX *)DatumGetPointer(newentry->key);
1184
1185
1186
1187
1188
1189 *result = 0.0;
1190
1191
1192 if (gbox_index_orig && gbox_index_new)
1193 {
1194
1197 float volume_extension = size_union - size_orig;
1198
1199
1200 if (volume_extension > FLT_EPSILON)
1202 else
1203 {
1204
1206 float edge_orig =
gidx_edge(gbox_index_orig);
1207 float edge_extension = edge_union - edge_orig;
1208 if (edge_extension > FLT_EPSILON)
1210 }
1211 }
1212 PG_RETURN_POINTER(result);
1213}
static float gidx_union_volume(GIDX *a, GIDX *b)
static float gidx_union_edge(GIDX *a, GIDX *b)
static float gidx_volume(GIDX *a)
static float gidx_edge(GIDX *a)
static float pack_float(const float value, const uint8_t realm)