Datum segmentize(PG_FUNCTION_ARGS);
+Datum box3d_xmin(PG_FUNCTION_ARGS);
+Datum box3d_ymin(PG_FUNCTION_ARGS);
+Datum box3d_zmin(PG_FUNCTION_ARGS);
+
+Datum box3d_xmax(PG_FUNCTION_ARGS);
+Datum box3d_ymax(PG_FUNCTION_ARGS);
+Datum box3d_zmax(PG_FUNCTION_ARGS);
+
Datum transform_geom(PG_FUNCTION_ARGS);
AS '@MODULE_FILENAME@'
LANGUAGE 'c' with (isstrict);
+
+------- bbox ops
+
+CREATE FUNCTION xmin(BOX3D)
+ RETURNS FLOAT8
+ AS '@MODULE_FILENAME@','box3d_xmin'
+ LANGUAGE 'c' with (isstrict,iscachable);
+
+CREATE FUNCTION ymin(BOX3D)
+ RETURNS FLOAT8
+ AS '@MODULE_FILENAME@','box3d_ymin'
+ LANGUAGE 'c' with (isstrict,iscachable);
+
+CREATE FUNCTION zmin(BOX3D)
+ RETURNS FLOAT8
+ AS '@MODULE_FILENAME@','box3d_zmin'
+ LANGUAGE 'c' with (isstrict,iscachable);
+
+CREATE FUNCTION xmax(BOX3D)
+ RETURNS FLOAT8
+ AS '@MODULE_FILENAME@','box3d_xmax'
+ LANGUAGE 'c' with (isstrict,iscachable);
+
+CREATE FUNCTION ymax(BOX3D)
+ RETURNS FLOAT8
+ AS '@MODULE_FILENAME@','box3d_ymax'
+ LANGUAGE 'c' with (isstrict,iscachable);
+
+CREATE FUNCTION zmax(BOX3D)
+ RETURNS FLOAT8
+ AS '@MODULE_FILENAME@','box3d_zmax'
+ LANGUAGE 'c' with (isstrict,iscachable);
+
------- Aggregate
CREATE FUNCTION combine_bbox(BOX3D,GEOMETRY)
AS '@MODULE_FILENAME@' LANGUAGE 'c' with (isstrict);
+
+
-------- GiST support functions
create function ggeometry_consistent(opaque,GEOMETRY,int4) returns bool
as '@MODULE_FILENAME@' language 'C';
return((GISTENTRY*)PG_GETARG_POINTER(0));
}
+
+PG_FUNCTION_INFO_V1(box3d_xmin);
+Datum box3d_xmin(PG_FUNCTION_ARGS)
+{
+ BOX3D *box1 = (BOX3D *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_FLOAT8(box1->LLB.x);
+}
+
+PG_FUNCTION_INFO_V1(box3d_ymin);
+Datum box3d_ymin(PG_FUNCTION_ARGS)
+{
+ BOX3D *box1 = (BOX3D *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_FLOAT8(box1->LLB.y);
+}
+PG_FUNCTION_INFO_V1(box3d_zmin);
+Datum box3d_zmin(PG_FUNCTION_ARGS)
+{
+ BOX3D *box1 = (BOX3D *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_FLOAT8(box1->LLB.z);
+}
+PG_FUNCTION_INFO_V1(box3d_xmax);
+Datum box3d_xmax(PG_FUNCTION_ARGS)
+{
+ BOX3D *box1 = (BOX3D *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_FLOAT8(box1->URT.x);
+}
+PG_FUNCTION_INFO_V1(box3d_ymax);
+Datum box3d_ymax(PG_FUNCTION_ARGS)
+{
+ BOX3D *box1 = (BOX3D *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_FLOAT8(box1->URT.y);
+}
+PG_FUNCTION_INFO_V1(box3d_zmax);
+Datum box3d_zmax(PG_FUNCTION_ARGS)
+{
+ BOX3D *box1 = (BOX3D *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_FLOAT8(box1->URT.z);
+}