]> granicus.if.org Git - postgis/commitdiff
Wrap de-toastings in a common MACRO
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 4 Mar 2015 20:45:31 +0000 (20:45 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 4 Mar 2015 20:45:31 +0000 (20:45 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@13306 b70326c6-7e19-0410-871a-916f4a2858ee

19 files changed:
libpgcommon/lwgeom_pg.h
postgis/geography_btree.c
postgis/geography_inout.c
postgis/geography_measurement.c
postgis/geometry_inout.c
postgis/gserialized_typmod.c
postgis/lwgeom_backend_api.c
postgis/lwgeom_box.c
postgis/lwgeom_box3d.c
postgis/lwgeom_export.c
postgis/lwgeom_functions_analytic.c
postgis/lwgeom_functions_basic.c
postgis/lwgeom_functions_lrs.c
postgis/lwgeom_geos.c
postgis/lwgeom_geos_clean.c
postgis/lwgeom_inout.c
postgis/lwgeom_ogc.c
postgis/lwgeom_spheroid.c
postgis/lwgeom_sqlmm.c

index 4c6b1ff900ab1b8135f8f186bfbf0d8de13f3b50..b14e674b7fbc2049fd617da0476fcea240292c61 100644 (file)
@@ -25,7 +25,7 @@
 /* Install PosgreSQL handlers for liblwgeom use */
 void pg_install_lwgeom_handlers(void);
 
-#define PG_GETARG_GSERIALIZED(varno) ((GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(varno)))
+#define PG_GETARG_GSERIALIZED_P(varno) ((GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(varno)))
 
 /* Debugging macros */
 #if POSTGIS_DEBUG_LEVEL > 0
index 14a0205005f6fedb7d014529d390ddf04576975d..dd3da79692c6c56216ea866885d053ffcc8c2d7d 100644 (file)
@@ -178,8 +178,8 @@ PG_FUNCTION_INFO_V1(geography_eq);
 Datum geography_eq(PG_FUNCTION_ARGS)
 {
        /* Perfect equals test based on hash */
-       GSERIALIZED *g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1);
 
        uint32 h1 = geography_hash(g1);
        uint32 h2 = geography_hash(g2);
index 74b35be4dad98c3d5b2af2bc5bd1a4d994361ca5..523e8afe1ffa0d1d799e3cb8eac16a0b1cab6830 100644 (file)
@@ -180,7 +180,7 @@ Datum geography_out(PG_FUNCTION_ARGS)
        GSERIALIZED *g = NULL;
        char *hexwkb;
 
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(g);
        hexwkb = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, 0);
        lwgeom_free(lwgeom);
@@ -223,7 +223,7 @@ Datum geography_as_gml(PG_FUNCTION_ARGS)
 
        /* Get the geography */
        if ( PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g = PG_GETARG_GSERIALIZED_P(1);
 
        /* Convert to lwgeom so we can run the old functions */
        lwgeom = lwgeom_from_gserialized(g);
@@ -341,7 +341,7 @@ Datum geography_as_kml(PG_FUNCTION_ARGS)
 
        /* Get the geometry */
        if ( PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g = PG_GETARG_GSERIALIZED_P(1);
 
        /* Convert to lwgeom so we can run the old functions */
        lwgeom = lwgeom_from_gserialized(g);
@@ -407,7 +407,7 @@ Datum geography_as_svg(PG_FUNCTION_ARGS)
 
        if ( PG_ARGISNULL(0) ) PG_RETURN_NULL();
 
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
 
        /* Convert to lwgeom so we can run the old functions */
        lwgeom = lwgeom_from_gserialized(g);
@@ -463,7 +463,7 @@ Datum geography_as_geojson(PG_FUNCTION_ARGS)
 
        /* Get the geography */
        if (PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g = PG_GETARG_GSERIALIZED_P(1);
 
        /* Convert to lwgeom so we can run the old functions */
        lwgeom = lwgeom_from_gserialized(g);
@@ -618,7 +618,7 @@ Datum geometry_from_geography(PG_FUNCTION_ARGS)
 {
        LWGEOM *lwgeom = NULL;
        GSERIALIZED *ret = NULL;
-       GSERIALIZED *g_ser = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *g_ser = PG_GETARG_GSERIALIZED_P(0);
 
        lwgeom = lwgeom_from_gserialized(g_ser);
 
@@ -676,7 +676,7 @@ Datum geography_send(PG_FUNCTION_ARGS)
        uint8_t *wkb;
        bytea *result;
 
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(g);
        wkb = lwgeom_to_wkb(lwgeom, WKB_EXTENDED, &size_result);
        lwgeom_free(lwgeom);
index ce370043a6cc80631c7cbc427bef66ff86b9c56c..fd0214f570c5e3cc719c26c420fe507776f5928e 100644 (file)
@@ -60,8 +60,8 @@ Datum geography_distance_uncached(PG_FUNCTION_ARGS)
        SPHEROID s;
 
        /* Get our geometry objects loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
 
        /* Read our tolerance value. */
        /* tolerance = PG_GETARG_FLOAT8(2); */
@@ -124,8 +124,8 @@ Datum geography_distance(PG_FUNCTION_ARGS)
        SPHEROID s;
 
        /* Get our geometry objects loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
 
        /* Read our tolerance value. */
        tolerance = PG_GETARG_FLOAT8(2);
@@ -192,8 +192,8 @@ Datum geography_dwithin(PG_FUNCTION_ARGS)
        int dwithin = LW_FALSE;
 
        /* Get our geometry objects loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
 
        /* Read our tolerance value. */
        tolerance = PG_GETARG_FLOAT8(2);
@@ -253,8 +253,8 @@ Datum geography_distance_tree(PG_FUNCTION_ARGS)
        SPHEROID s;
 
        /* Get our geometry objects loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
 
        /* Return FALSE on empty arguments. */
        if ( gserialized_is_empty(g1) || gserialized_is_empty(g2) )
@@ -305,8 +305,8 @@ Datum geography_dwithin_uncached(PG_FUNCTION_ARGS)
        SPHEROID s;
 
        /* Get our geometry objects loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
 
        /* Read our tolerance value. */
        tolerance = PG_GETARG_FLOAT8(2);
@@ -402,7 +402,7 @@ Datum geography_area(PG_FUNCTION_ARGS)
        SPHEROID s;
 
        /* Get our geometry object loaded into memory. */
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
 
        /* Read our calculation type */
        use_spheroid = PG_GETARG_BOOL(1);
@@ -474,7 +474,7 @@ Datum geography_perimeter(PG_FUNCTION_ARGS)
     int type;
 
        /* Get our geometry object loaded into memory. */
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
        
        /* Only return for area features. */
     type = gserialized_get_type(g);
@@ -533,7 +533,7 @@ Datum geography_length(PG_FUNCTION_ARGS)
        SPHEROID s;
 
        /* Get our geometry object loaded into memory. */
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(g);
 
        /* EMPTY things have no length */
@@ -585,7 +585,7 @@ Datum geography_point_outside(PG_FUNCTION_ARGS)
        POINT2D pt;
 
        /* Get our geometry object loaded into memory. */
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
        
        /* We need the bounding box to get an outside point for area algorithm */
        if ( gserialized_get_gbox_p(g, &gbox) == LW_FAILURE )
@@ -627,8 +627,8 @@ Datum geography_covers(PG_FUNCTION_ARGS)
        int result = LW_FALSE;
 
        /* Get our geometry objects loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
 
        type1 = gserialized_get_type(g1);
        type2 = gserialized_get_type(g2);
@@ -840,7 +840,7 @@ Datum geography_project(PG_FUNCTION_ARGS)
                PG_RETURN_NULL();
        
        /* Get our geometry object loaded into memory. */
-       g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g = PG_GETARG_GSERIALIZED_P(0);
        
        /* Only return for points. */
     type = gserialized_get_type(g);
@@ -912,8 +912,8 @@ Datum geography_azimuth(PG_FUNCTION_ARGS)
        uint32_t type1, type2;
 
        /* Get our geometry object loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
+       g2 = PG_GETARG_GSERIALIZED_P(1);
        
        /* Only return for points. */
     type1 = gserialized_get_type(g1);
@@ -975,7 +975,7 @@ Datum geography_segmentize(PG_FUNCTION_ARGS)
        uint32_t type1;
 
        /* Get our geometry object loaded into memory. */
-       g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       g1 = PG_GETARG_GSERIALIZED_P(0);
     type1 = gserialized_get_type(g1);
 
        /* Convert max_seg_length from metric units to radians */
index 26a994fed040280e39728bf106f7cd1af88dc079..5c5a97d192288194eaa654e19f359db1079496ab 100644 (file)
@@ -57,7 +57,7 @@ Datum geometry_to_point(PG_FUNCTION_ARGS)
        if ( PG_ARGISNULL(0) )
                PG_RETURN_NULL();
        
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        
        if ( gserialized_get_type(geom) != POINTTYPE )
                elog(ERROR, "geometry_to_point only accepts Points");
@@ -96,7 +96,7 @@ Datum geometry_to_path(PG_FUNCTION_ARGS)
        if ( PG_ARGISNULL(0) )
                PG_RETURN_NULL();
                
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        
        if ( gserialized_get_type(geom) != LINETYPE )
                elog(ERROR, "geometry_to_path only accepts LineStrings");
@@ -181,7 +181,7 @@ Datum geometry_to_polygon(PG_FUNCTION_ARGS)
        if ( PG_ARGISNULL(0) )
                PG_RETURN_NULL();
                
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        
        if ( gserialized_get_type(geom) != POLYGONTYPE )
                elog(ERROR, "geometry_to_polygon only accepts Polygons");
index 6d4d6970b07c342c8a82874580252eac612ef326..aef0e707404420c39f8e60cb32b0b9a2c180125b 100644 (file)
@@ -290,7 +290,7 @@ Datum geometry_typmod_in(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(geography_enforce_typmod);
 Datum geography_enforce_typmod(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *arg = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *arg = PG_GETARG_GSERIALIZED_P(0);
        int32 typmod = PG_GETARG_INT32(1);
        /* We don't need to have different behavior based on explicitness. */
        /* bool isExplicit = PG_GETARG_BOOL(2); */
@@ -309,7 +309,7 @@ Datum geography_enforce_typmod(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(geometry_enforce_typmod);
 Datum geometry_enforce_typmod(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *arg = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *arg = PG_GETARG_GSERIALIZED_P(0);
        int32 typmod = PG_GETARG_INT32(1);
        /* We don't need to have different behavior based on explicitness. */
        /* bool isExplicit = PG_GETARG_BOOL(2); */
index 649b109cf8a41c2ff694c5af4beface8157e46da..2d3c3a1c3f100794fa68d9741a23e24fce2d60ce 100644 (file)
 
 #include "postgres.h"
 #include "fmgr.h"
-#include "../liblwgeom/liblwgeom.h"
-
-/* for custom variables */
-#include "utils/guc.h"
+#include "utils/guc.h" /* for custom variables */
 
 #include "../postgis_config.h"
+#include "lwgeom_pg.h"
+#include "liblwgeom.h"
+
 #include "lwgeom_backend_api.h"
 #include "lwgeom_geos.h"
 #if HAVE_SFCGAL
@@ -156,8 +156,8 @@ PG_FUNCTION_INFO_V1(intersects3d_dwithin);
 Datum intersects3d_dwithin(PG_FUNCTION_ARGS)
 {
     double mindist;
-    GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-    GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+    GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+    GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
     LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
     LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
 
index 2cb98539c25714daf515a522748119551faa59b8..1dbea2dc7ff0d4cf4febacceb38be87a3b821d19 100644 (file)
@@ -108,7 +108,7 @@ Datum BOX2D_out(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_to_BOX2D);
 Datum LWGEOM_to_BOX2D(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        GBOX gbox;
 
@@ -133,7 +133,7 @@ Datum LWGEOM_to_BOX2D(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_to_BOX2DF);
 Datum LWGEOM_to_BOX2DF(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GBOX gbox;
 
        if ( gserialized_get_gbox_p(geom, &gbox) == LW_FAILURE )
@@ -406,7 +406,7 @@ Datum BOX2D_combine(PG_FUNCTION_ARGS)
 
        if (box2d_ptr == NULL)
        {
-               lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+               lwgeom = PG_GETARG_GSERIALIZED_P(1);
                /* empty geom would make getbox2d_p return NULL */
                if ( ! gserialized_get_gbox_p(lwgeom, &box) ) PG_RETURN_NULL();
                memcpy(result, &box, sizeof(GBOX));
@@ -422,7 +422,7 @@ Datum BOX2D_combine(PG_FUNCTION_ARGS)
 
        /*combine_bbox(BOX3D, geometry) => union(BOX3D, geometry->bvol) */
 
-       lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       lwgeom = PG_GETARG_GSERIALIZED_P(1);
        if ( ! gserialized_get_gbox_p(lwgeom, &box) )
        {
                /* must be the empty geom */
@@ -520,8 +520,8 @@ Datum BOX2D_to_LWGEOM(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(BOX2D_construct);
 Datum BOX2D_construct(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pgmin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *pgmax = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *pgmin = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *pgmax = PG_GETARG_GSERIALIZED_P(1);
        GBOX *result;
        LWPOINT *minpoint, *maxpoint;
        double min, max, tmp;
index 8b8cdef8418656b7447dfcff4b9ce4262f58b808..73fb7d02248a5289666377710b792a5413c76a28 100644 (file)
@@ -282,7 +282,7 @@ Datum BOX3D_expand(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_to_BOX3D);
 Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        GBOX gbox;
        BOX3D *result;
@@ -412,8 +412,8 @@ Datum BOX3D_combine(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(BOX3D_construct);
 Datum BOX3D_construct(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *min = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *max = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *min = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *max = PG_GETARG_GSERIALIZED_P(1);
        BOX3D *result = palloc(sizeof(BOX3D));
        LWGEOM *minpoint, *maxpoint;
        POINT3DZ minp, maxp;
index 96b41d14296bd05ae4f41f6e899f20ae8be2f89e..c5bfba541b758cc985eacaf1a7d3da858cd7d911 100644 (file)
@@ -190,7 +190,7 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS)
 
        /* Get the geometry */
        if ( PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom = PG_GETARG_GSERIALIZED_P(1);
 
        /* Retrieve precision if any (default is max) */
        if (PG_NARGS() >2 && !PG_ARGISNULL(2))
@@ -305,7 +305,7 @@ Datum LWGEOM_asKML(PG_FUNCTION_ARGS)
 
        /* Get the geometry */
        if ( PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom = PG_GETARG_GSERIALIZED_P(1);
 
        /* Retrieve precision if any (default is max) */
        if (PG_NARGS() >2 && !PG_ARGISNULL(2))
@@ -380,7 +380,7 @@ Datum LWGEOM_asGeoJson(PG_FUNCTION_ARGS)
 
        /* Get the geometry */
        if (PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom = PG_GETARG_GSERIALIZED_P(1);
 
        /* Retrieve precision if any (default is max) */
        if (PG_NARGS() >2 && !PG_ARGISNULL(2))
@@ -449,7 +449,7 @@ Datum LWGEOM_asSVG(PG_FUNCTION_ARGS)
 
        if ( PG_ARGISNULL(0) ) PG_RETURN_NULL();
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        /* check for relative path notation */
        if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) )
@@ -504,7 +504,7 @@ Datum LWGEOM_asX3D(PG_FUNCTION_ARGS)
 
        /* Get the geometry */
        if ( PG_ARGISNULL(1) ) PG_RETURN_NULL();
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom = PG_GETARG_GSERIALIZED_P(1);
 
        /* Retrieve precision if any (default is max) */
        if (PG_NARGS() >2 && !PG_ARGISNULL(2))
@@ -573,7 +573,7 @@ Datum LWGEOM_asEncodedPolyline(PG_FUNCTION_ARGS)
 
        if ( PG_ARGISNULL(0) ) PG_RETURN_NULL();
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        if (gserialized_get_srid(geom) != 4326) {
                PG_FREE_IF_COPY(geom, 0);
                elog(ERROR, "Only SRID 4326 is supported.");
index 1229b4f709468972683ddcc77da5d77d8f7a2857..15d22d8106f1c5f7b93284a0e460a1a69b05fbea 100644 (file)
@@ -43,7 +43,7 @@ int point_in_ring_rtree(RTREE_NODE *root, POINT2D *point);
 PG_FUNCTION_INFO_V1(LWGEOM_simplify2d);
 Datum LWGEOM_simplify2d(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
   int type = gserialized_get_type(geom);
        LWGEOM *in;
@@ -71,7 +71,7 @@ Datum LWGEOM_simplify2d(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_SetEffectiveArea);
 Datum LWGEOM_SetEffectiveArea(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
   int type = gserialized_get_type(geom);
        LWGEOM *in;
@@ -116,7 +116,7 @@ Datum LWGEOM_line_interpolate_point(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(LWGEOM_line_interpolate_point);
 Datum LWGEOM_line_interpolate_point(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *gser = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *gser = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        double distance = PG_GETARG_FLOAT8(1);
        LWLINE *line;
@@ -287,7 +287,7 @@ Datum LWGEOM_snaptogrid(PG_FUNCTION_ARGS)
        LWGEOM *out_lwgeom;
        gridspec grid;
 
-       GSERIALIZED *in_geom = PG_GETARG_GSERIALIZED(0);
+       GSERIALIZED *in_geom = PG_GETARG_GSERIALIZED_P(0);
 
        /* Set grid values to zero to start */
        memset(&grid, 0, sizeof(gridspec));
@@ -353,7 +353,7 @@ Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS)
        /* BOX3D box3d; */
        POINT4D offsetpoint;
 
-       in_geom = PG_GETARG_GSERIALIZED(0);
+       in_geom = PG_GETARG_GSERIALIZED_P(0);
 
        /* Return input geometry if input geometry is empty */
        if ( gserialized_is_empty(in_geom) )
@@ -361,7 +361,7 @@ Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS)
                PG_RETURN_POINTER(in_geom);
        }
 
-       in_point = PG_GETARG_GSERIALIZED(1);
+       in_point = PG_GETARG_GSERIALIZED_P(1);
        in_lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(in_point));
        if ( in_lwpoint == NULL )
        {
@@ -422,8 +422,8 @@ Datum ST_LineCrossingDirection(PG_FUNCTION_ARGS)
        int type1, type2, rv;
        LWLINE *l1 = NULL;
        LWLINE *l2 = NULL;
-       GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
 
@@ -459,7 +459,7 @@ Datum LWGEOM_line_substring(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(LWGEOM_line_substring);
 Datum LWGEOM_line_substring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        double from = PG_GETARG_FLOAT8(1);
        double to = PG_GETARG_FLOAT8(2);
        LWGEOM *olwgeom;
index b7038763a57195e28ac03483710cc002aa479bd0..f0380d477992c748ab70bb3251b40d6a1b045b67 100644 (file)
@@ -114,7 +114,7 @@ Datum LWGEOM_mem_size(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_summary);
 Datum LWGEOM_summary(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        char *result;
        text *mytext;
        LWGEOM *lwgeom;
@@ -211,7 +211,7 @@ Datum postgis_libxml_version(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_npoints);
 Datum LWGEOM_npoints(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        int npoints = 0;
 
@@ -226,7 +226,7 @@ Datum LWGEOM_npoints(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_nrings);
 Datum LWGEOM_nrings(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        int nrings = 0;
 
@@ -246,7 +246,7 @@ Datum LWGEOM_nrings(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_area_polygon);
 Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double area = 0.0;
 
@@ -270,7 +270,7 @@ Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_length2d_linestring);
 Datum LWGEOM_length2d_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double dist = lwgeom_length_2d(lwgeom);
        lwgeom_free(lwgeom);
@@ -288,7 +288,7 @@ Datum LWGEOM_length2d_linestring(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_length_linestring);
 Datum LWGEOM_length_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double dist = lwgeom_length(lwgeom);
        lwgeom_free(lwgeom);
@@ -306,7 +306,7 @@ Datum LWGEOM_length_linestring(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_perimeter_poly);
 Datum LWGEOM_perimeter_poly(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double perimeter = 0.0;
        
@@ -325,7 +325,7 @@ Datum LWGEOM_perimeter_poly(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_perimeter2d_poly);
 Datum LWGEOM_perimeter2d_poly(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double perimeter = 0.0;
        
@@ -339,7 +339,7 @@ Datum LWGEOM_perimeter2d_poly(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_2d);
 Datum LWGEOM_force_2d(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *pg_geom_out;
        LWGEOM *lwg_in, *lwg_out;
 
@@ -360,7 +360,7 @@ Datum LWGEOM_force_2d(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_3dz);
 Datum LWGEOM_force_3dz(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *pg_geom_out;
        LWGEOM *lwg_in, *lwg_out;
 
@@ -382,7 +382,7 @@ Datum LWGEOM_force_3dz(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_3dm);
 Datum LWGEOM_force_3dm(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *pg_geom_out;
        LWGEOM *lwg_in, *lwg_out;
 
@@ -404,7 +404,7 @@ Datum LWGEOM_force_3dm(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_4d);
 Datum LWGEOM_force_4d(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *pg_geom_out;
        LWGEOM *lwg_in, *lwg_out;
 
@@ -426,7 +426,7 @@ Datum LWGEOM_force_4d(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_collection);
 Datum LWGEOM_force_collection(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        LWGEOM **lwgeoms;
        LWGEOM *lwgeom;
@@ -481,7 +481,7 @@ Datum LWGEOM_force_collection(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_multi);
 Datum LWGEOM_force_multi(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        LWGEOM *lwgeom;
        LWGEOM *ogeom;
@@ -524,7 +524,7 @@ Datum LWGEOM_force_multi(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_curve);
 Datum LWGEOM_force_curve(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        LWGEOM *lwgeom;
        LWGEOM *ogeom;
@@ -547,7 +547,7 @@ Datum LWGEOM_force_curve(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_force_sfs);
 Datum LWGEOM_force_sfs(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        LWGEOM *lwgeom;
        LWGEOM *ogeom;
@@ -585,8 +585,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_closestpoint);
 Datum LWGEOM_closestpoint(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *point;
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -619,8 +619,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_shortestline2d);
 Datum LWGEOM_shortestline2d(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *theline;
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -653,8 +653,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_longestline2d);
 Datum LWGEOM_longestline2d(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *theline;
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -686,8 +686,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_mindistance2d);
 Datum LWGEOM_mindistance2d(PG_FUNCTION_ARGS)
 {
        double mindist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
 
@@ -721,8 +721,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dwithin);
 Datum LWGEOM_dwithin(PG_FUNCTION_ARGS)
 {
        double mindist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        double tolerance = PG_GETARG_FLOAT8(2); 
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -757,8 +757,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dfullywithin);
 Datum LWGEOM_dfullywithin(PG_FUNCTION_ARGS)
 {
        double maxdist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        double tolerance = PG_GETARG_FLOAT8(2); 
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -794,8 +794,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_maxdistance2d_linestring);
 Datum LWGEOM_maxdistance2d_linestring(PG_FUNCTION_ARGS)
 {
        double maxdist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
 
@@ -825,8 +825,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_closestpoint3d);
 Datum LWGEOM_closestpoint3d(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *point;
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -861,8 +861,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_shortestline3d);
 Datum LWGEOM_shortestline3d(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *theline;
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -897,8 +897,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_longestline3d);
 Datum LWGEOM_longestline3d(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *theline;
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -932,8 +932,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_mindistance3d);
 Datum LWGEOM_mindistance3d(PG_FUNCTION_ARGS)
 {
        double mindist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
 
@@ -964,8 +964,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dwithin3d);
 Datum LWGEOM_dwithin3d(PG_FUNCTION_ARGS)
 {
        double mindist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        double tolerance = PG_GETARG_FLOAT8(2); 
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -1001,8 +1001,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dfullywithin3d);
 Datum LWGEOM_dfullywithin3d(PG_FUNCTION_ARGS)
 {
        double maxdist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        double tolerance = PG_GETARG_FLOAT8(2); 
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
@@ -1037,8 +1037,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_maxdistance3d);
 Datum LWGEOM_maxdistance3d(PG_FUNCTION_ARGS)
 {
        double maxdist;
-       GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
        LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
 
@@ -1102,7 +1102,7 @@ Datum LWGEOM_inside_circle_point(PG_FUNCTION_ARGS)
        LWGEOM *lwgeom;
        int inside;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(geom);
        lwpoint = lwgeom_as_lwpoint(lwgeom);
        if ( lwpoint == NULL || lwgeom_is_empty(lwgeom) )
@@ -1148,8 +1148,8 @@ Datum LWGEOM_collect(PG_FUNCTION_ARGS)
        if (PG_ARGISNULL(1))
                PG_RETURN_DATUM(PG_GETARG_DATUM(0));
 
-       gser1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       gser2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       gser1 = PG_GETARG_GSERIALIZED_P(0);
+       gser2 = PG_GETARG_GSERIALIZED_P(1);
 
        POSTGIS_DEBUGF(3, "LWGEOM_collect(%s, %s): call", lwtype_name(gserialized_get_type(gser1)), lwtype_name(gserialized_get_type(gser2)));
 
@@ -1384,7 +1384,7 @@ Datum LWGEOM_line_from_mpoint(PG_FUNCTION_ARGS)
        POSTGIS_DEBUG(2, "LWGEOM_line_from_mpoint called");
 
        /* Get input GSERIALIZED and deserialize it */
-       ingeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       ingeom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( gserialized_get_type(ingeom) != MULTIPOINTTYPE )
        {
@@ -1549,8 +1549,8 @@ Datum LWGEOM_makeline(PG_FUNCTION_ARGS)
        POSTGIS_DEBUG(2, "LWGEOM_makeline called.");
 
        /* Get input datum */
-       pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       pglwg1 = PG_GETARG_GSERIALIZED_P(0);
+       pglwg2 = PG_GETARG_GSERIALIZED_P(1);
 
        if ( (gserialized_get_type(pglwg1) != POINTTYPE && gserialized_get_type(pglwg1) != LINETYPE) ||
             (gserialized_get_type(pglwg2) != POINTTYPE && gserialized_get_type(pglwg2) != LINETYPE) )
@@ -1596,7 +1596,7 @@ Datum LWGEOM_makepoly(PG_FUNCTION_ARGS)
        POSTGIS_DEBUG(2, "LWGEOM_makepoly called.");
 
        /* Get input shell */
-       pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       pglwg1 = PG_GETARG_GSERIALIZED_P(0);
        if ( gserialized_get_type(pglwg1) != LINETYPE )
        {
                lwerror("Shell is not a line");
@@ -1646,7 +1646,7 @@ Datum LWGEOM_makepoly(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_expand);
 Datum LWGEOM_expand(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double d = PG_GETARG_FLOAT8(1);
        POINT4D pt;
@@ -1725,7 +1725,7 @@ Datum LWGEOM_expand(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_to_BOX);
 Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pg_lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *pg_lwgeom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(pg_lwgeom);
        GBOX gbox;
        int result;
@@ -1761,7 +1761,7 @@ Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_envelope);
 Datum LWGEOM_envelope(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        int srid = lwgeom->srid;
        POINT4D pt;
@@ -1883,7 +1883,7 @@ Datum LWGEOM_segmentize2d(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(2, "LWGEOM_segmentize2d called");
 
-       ingeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       ingeom = PG_GETARG_GSERIALIZED_P(0);
        dist = PG_GETARG_FLOAT8(1);
        type = gserialized_get_type(ingeom); 
 
@@ -1984,7 +1984,7 @@ Datum LWGEOM_noop(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(2, "LWGEOM_noop called");
 
-       in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       in = PG_GETARG_GSERIALIZED_P(0);
 
        lwgeom = lwgeom_from_gserialized(in);
 
@@ -2011,7 +2011,7 @@ Datum LWGEOM_zmflag(PG_FUNCTION_ARGS)
        GSERIALIZED *in;
        int ret = 0;
 
-       in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       in = PG_GETARG_GSERIALIZED_P(0);
        if ( gserialized_has_z(in) ) ret += 2;
        if ( gserialized_has_m(in) ) ret += 1;
        PG_FREE_IF_COPY(in, 0);
@@ -2021,14 +2021,14 @@ Datum LWGEOM_zmflag(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_hasz);
 Datum LWGEOM_hasz(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *in = PG_GETARG_GSERIALIZED_P(0);
        PG_RETURN_BOOL(gserialized_has_z(in));
 }
 
 PG_FUNCTION_INFO_V1(LWGEOM_hasm);
 Datum LWGEOM_hasm(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *in = PG_GETARG_GSERIALIZED_P(0);
        PG_RETURN_BOOL(gserialized_has_m(in));
 }
 
@@ -2036,7 +2036,7 @@ Datum LWGEOM_hasm(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_hasBBOX);
 Datum LWGEOM_hasBBOX(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *in = PG_GETARG_GSERIALIZED_P(0);
        char res = gserialized_has_bbox(in);
        PG_FREE_IF_COPY(in, 0);
        PG_RETURN_BOOL(res);
@@ -2049,7 +2049,7 @@ Datum LWGEOM_ndims(PG_FUNCTION_ARGS)
        GSERIALIZED *in;
        int ret;
 
-       in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       in = PG_GETARG_GSERIALIZED_P(0);
        ret = (gserialized_ndims(in));
        PG_FREE_IF_COPY(in, 0);
        PG_RETURN_INT16(ret);
@@ -2059,8 +2059,8 @@ Datum LWGEOM_ndims(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_same);
 Datum LWGEOM_same(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *g1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *g2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *lwg1, *lwg2;
        bool result;
 
@@ -2233,8 +2233,8 @@ Datum LWGEOM_addpoint(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(2, "LWGEOM_addpoint called.");
 
-       pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       pglwg1 = PG_GETARG_GSERIALIZED_P(0);
+       pglwg2 = PG_GETARG_GSERIALIZED_P(1);
 
        if ( PG_NARGS() > 2 )
        {
@@ -2292,7 +2292,7 @@ Datum LWGEOM_removepoint(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(2, "LWGEOM_removepoint called.");
 
-       pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       pglwg1 = PG_GETARG_GSERIALIZED_P(0);
        which = PG_GETARG_INT32(1);
 
        if ( gserialized_get_type(pglwg1) != LINETYPE )
@@ -2342,7 +2342,7 @@ Datum LWGEOM_setpoint_linestring(PG_FUNCTION_ARGS)
        pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0));
 
        which = PG_GETARG_INT32(1);
-       pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(2));
+       pglwg2 = PG_GETARG_GSERIALIZED_P(2);
 
 
        /* Extract a POINT4D from the point */
@@ -2395,7 +2395,7 @@ Datum LWGEOM_asEWKT(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(2, "LWGEOM_asEWKT called.");
 
-       geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(geom);
 
        /* Write to WKT and free the geometry */
@@ -2427,7 +2427,7 @@ Datum LWGEOM_azimuth(PG_FUNCTION_ARGS)
        int srid;
 
        /* Extract first point */
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom));
        if ( ! lwpoint )
        {
@@ -2446,7 +2446,7 @@ Datum LWGEOM_azimuth(PG_FUNCTION_ARGS)
        PG_FREE_IF_COPY(geom, 0);
 
        /* Extract second point */
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom = PG_GETARG_GSERIALIZED_P(1);
        lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom));
        if ( ! lwpoint )
        {
@@ -2494,8 +2494,8 @@ Datum LWGEOM_azimuth(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(optimistic_overlap);
 Datum optimistic_overlap(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *pg_geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *pg_geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *pg_geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *pg_geom2 = PG_GETARG_GSERIALIZED_P(1);
        double dist = PG_GETARG_FLOAT8(2);
        GBOX g1_bvol;
        double calc_dist;
@@ -2599,7 +2599,7 @@ Datum ST_GeoHash(PG_FUNCTION_ARGS)
                PG_RETURN_NULL();
        }
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( ! PG_ARGISNULL(1) )
        {
@@ -2620,7 +2620,7 @@ Datum ST_GeoHash(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(ST_CollectionExtract);
 Datum ST_CollectionExtract(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *input = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *output;
        LWGEOM *lwgeom = lwgeom_from_gserialized(input);
        LWGEOM *lwcol = NULL;
@@ -2672,7 +2672,7 @@ Datum ST_CollectionExtract(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(ST_CollectionHomogenize);
 Datum ST_CollectionHomogenize(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *input = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *output;
        LWGEOM *lwgeom = lwgeom_from_gserialized(input);
        LWGEOM *lwoutput = NULL;
index fd18319f596893e9cc0540a69c82a019e20baf02..c8bd70f218d46f763d242c5d7946d2b02ed069db 100644 (file)
@@ -28,7 +28,7 @@ Datum ST_AddMeasure(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(ST_AddMeasure);
 Datum ST_AddMeasure(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *gin = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *gout;
        double start_measure = PG_GETARG_FLOAT8(1);
        double end_measure = PG_GETARG_FLOAT8(2);
@@ -68,7 +68,7 @@ Datum ST_LocateAlong(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(ST_LocateAlong);
 Datum ST_LocateAlong(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *gin = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *gout;
        LWGEOM *lwin = NULL, *lwout = NULL;
        double measure = PG_GETARG_FLOAT8(1);
@@ -96,7 +96,7 @@ Datum ST_LocateBetween(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(ST_LocateBetween);
 Datum ST_LocateBetween(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom_in = PG_GETARG_GSERIALIZED_P(0);
        double from = PG_GETARG_FLOAT8(1);
        double to = PG_GETARG_FLOAT8(2);
        double offset = PG_GETARG_FLOAT8(3);
@@ -137,7 +137,7 @@ Datum ST_LocateBetweenElevations(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(ST_LocateBetweenElevations);
 Datum ST_LocateBetweenElevations(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom_in = PG_GETARG_GSERIALIZED_P(0);
        double from = PG_GETARG_FLOAT8(1);
        double to = PG_GETARG_FLOAT8(2);
        LWCOLLECTION *geom_out = NULL;
@@ -170,8 +170,8 @@ Datum ST_InterpolatePoint(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(ST_InterpolatePoint);
 Datum ST_InterpolatePoint(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *gser_line = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *gser_point = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *gser_line = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *gser_point = PG_GETARG_GSERIALIZED_P(1);
        LWGEOM *lwline;
        LWPOINT *lwpoint;
 
@@ -207,8 +207,8 @@ Datum LWGEOM_line_locate_point(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(LWGEOM_line_locate_point);
 Datum LWGEOM_line_locate_point(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        LWLINE *lwline;
        LWPOINT *lwpoint;
        POINTARRAY *pa;
@@ -693,7 +693,7 @@ Datum LWGEOM_locate_between_m(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(LWGEOM_locate_between_m);
 Datum LWGEOM_locate_between_m(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *gin = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *gout;
        double start_measure = PG_GETARG_FLOAT8(1);
        double end_measure = PG_GETARG_FLOAT8(2);
index b39681adfaa9da7ac2635c1f89be23a18cfe23b5..2b6837b00b11d0fa74173b5e2decd3a244bb59c3 100644 (file)
@@ -849,8 +849,8 @@ Datum geomunion(PG_FUNCTION_ARGS)
        GSERIALIZED *result;
        LWGEOM *lwgeom1, *lwgeom2, *lwresult ;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        lwgeom1 = lwgeom_from_gserialized(geom1) ;
        lwgeom2 = lwgeom_from_gserialized(geom2) ;
@@ -882,8 +882,8 @@ Datum symdifference(PG_FUNCTION_ARGS)
        GSERIALIZED *result;
        LWGEOM *lwgeom1, *lwgeom2, *lwresult ;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        lwgeom1 = lwgeom_from_gserialized(geom1) ;
        lwgeom2 = lwgeom_from_gserialized(geom2) ;
@@ -912,7 +912,7 @@ Datum boundary(PG_FUNCTION_ARGS)
        int srid;
 
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
 
        /* Empty.Boundary() == Empty */
        if ( gserialized_is_empty(geom1) )
@@ -1530,7 +1530,7 @@ Datum pointonsurface(PG_FUNCTION_ARGS)
        GEOSGeometry *g1, *g3;
        GSERIALIZED *result;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        /* Empty.PointOnSurface == Point Empty */
        if ( gserialized_is_empty(geom) )
@@ -1771,7 +1771,7 @@ Datum isvalid(PG_FUNCTION_ARGS)
        GBOX box1;
 #endif
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
 
        /* Empty.IsValid() == TRUE */
        if ( gserialized_is_empty(geom1) )
@@ -1838,7 +1838,7 @@ Datum isvalidreason(PG_FUNCTION_ARGS)
   GBOX box;
 #endif
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
 #if POSTGIS_GEOS_VERSION < 33
        /* Short circuit and return if we have infinite coordinates */
@@ -1931,7 +1931,7 @@ Datum isvaliddetail(PG_FUNCTION_ARGS)
         */
        attinmeta = TupleDescGetAttInMetadata(tupdesc);
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) ) {
                flags = PG_GETARG_INT32(1);
@@ -2005,8 +2005,8 @@ Datum overlaps(PG_FUNCTION_ARGS)
        bool result;
        GBOX box1, box2;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -2461,8 +2461,8 @@ Datum coveredby(PG_FUNCTION_ARGS)
        RTREE_POLY_CACHE *poly_cache;
        char *patt = "**F**F***";
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -2582,8 +2582,8 @@ Datum crosses(PG_FUNCTION_ARGS)
        int result;
        GBOX box1, box2;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -2655,8 +2655,8 @@ Datum geos_intersects(PG_FUNCTION_ARGS)
        RTREE_POLY_CACHE *poly_cache;
        PrepGeomCache *prep_cache;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -2812,8 +2812,8 @@ Datum touches(PG_FUNCTION_ARGS)
        bool result;
        GBOX box1, box2;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -2880,8 +2880,8 @@ Datum disjoint(PG_FUNCTION_ARGS)
        bool result;
        GBOX box1, box2;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -3021,8 +3021,8 @@ Datum relate_full(PG_FUNCTION_ARGS)
 
        /* TODO handle empty */
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        if ( PG_NARGS() > 2 ) {
 #if POSTGIS_GEOS_VERSION >= 33
@@ -3098,8 +3098,8 @@ Datum ST_Equals(PG_FUNCTION_ARGS)
        bool result;
        GBOX box1, box2;
 
-       geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       geom1 = PG_GETARG_GSERIALIZED_P(0);
+       geom2 = PG_GETARG_GSERIALIZED_P(1);
 
        errorIfGeometryCollection(geom1,geom2);
        error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
@@ -3202,7 +3202,7 @@ Datum isring(PG_FUNCTION_ARGS)
        GEOSGeometry *g1;
        int result;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if (gserialized_get_type(geom) != LINETYPE)
        {
@@ -3301,7 +3301,7 @@ Datum GEOSnoop(PG_FUNCTION_ARGS)
 
        initGEOS(lwnotice, lwgeom_geos_error);
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
 
        geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom);
@@ -3475,7 +3475,7 @@ Datum ST_BuildArea(PG_FUNCTION_ARGS)
        GSERIALIZED *geom;
        LWGEOM *lwgeom_in, *lwgeom_out;
 
-       geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        lwgeom_in = lwgeom_from_gserialized(geom);
 
        lwgeom_out = lwgeom_buildarea(lwgeom_in);
@@ -3506,7 +3506,7 @@ Datum ST_DelaunayTriangles(PG_FUNCTION_ARGS)
        double  tolerance = 0.0;
        int flags = 0;
 
-       geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        tolerance = PG_GETARG_FLOAT8(1);
        flags = PG_GETARG_INT32(2);
 
@@ -3599,10 +3599,10 @@ Datum ST_Split(PG_FUNCTION_ARGS)
        GSERIALIZED *in, *blade_in, *out;
        LWGEOM *lwgeom_in, *lwblade_in, *lwgeom_out;
 
-       in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       in = PG_GETARG_GSERIALIZED_P(0);
        lwgeom_in = lwgeom_from_gserialized(in);
 
-       blade_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       blade_in = PG_GETARG_GSERIALIZED_P(1);
        lwblade_in = lwgeom_from_gserialized(blade_in);
 
        error_if_srid_mismatch(lwgeom_in->srid, lwblade_in->srid);
index ff7cebff95a7f1c95550bf14277035697015f868..602bcb8db93d78be1b230eb1e53cd5bcec402304 100644 (file)
@@ -61,7 +61,7 @@ Datum ST_MakeValid(PG_FUNCTION_ARGS)
        GSERIALIZED *in, *out;
        LWGEOM *lwgeom_in, *lwgeom_out;
 
-       in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       in = PG_GETARG_GSERIALIZED_P(0);
        lwgeom_in = lwgeom_from_gserialized(in);
 
        switch ( lwgeom_in->type )
@@ -154,7 +154,7 @@ Datum ST_CleanGeometry(PG_FUNCTION_ARGS)
        GSERIALIZED *in, *out;
        LWGEOM *lwgeom_in, *lwgeom_out;
 
-       in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       in = PG_GETARG_GSERIALIZED_P(0);
        lwgeom_in = lwgeom_from_gserialized(in);
 
        /* Short-circuit: empty geometry are the cleanest ! */
index 7a0045d9e4ac28005142d7481394278ffaab2766..c9125cdf6b16d59931740692eb817a43ec3bb3a8 100644 (file)
@@ -231,7 +231,7 @@ Datum LWGEOM_to_latlon(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_out);
 Datum LWGEOM_out(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom;
        char *hexwkb;
        size_t hexwkb_size;
@@ -249,7 +249,7 @@ Datum LWGEOM_out(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_asHEXEWKB);
 Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom;
        char *hexwkb;
        size_t hexwkb_size;
@@ -302,7 +302,7 @@ Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_to_text);
 Datum LWGEOM_to_text(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom;
        char *hexwkb;
        size_t hexwkb_size;
@@ -385,7 +385,7 @@ Datum LWGEOMFromTWKB(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(WKBFromLWGEOM);
 Datum WKBFromLWGEOM(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom;
        uint8_t *wkb;
        size_t wkb_size;
@@ -441,7 +441,7 @@ Datum TWKBFromLWGEOM(PG_FUNCTION_ARGS)
        /*check for null input since we cannot have the sql-function as strict. 
        That is because we use null as default for optional ID*/        
        if ( PG_ARGISNULL(0) ) PG_RETURN_NULL();
-               geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+               geom = PG_GETARG_GSERIALIZED_P(0);
        
        /* If user specified precision, respect it */
        if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) )
@@ -499,7 +499,7 @@ Datum TWKBFromLWGEOM(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_addBBOX);
 Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        LWGEOM *lwgeom;
 
@@ -515,7 +515,7 @@ Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_dropBBOX);
 Datum LWGEOM_dropBBOX(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
 
        /* No box? we're done already! */
        if ( ! gserialized_has_bbox(geom) )
index e753215a499dff03d0341ca7964af2bf18fbab89..c934cf9cd6981ca88536cc271a7d55d8a84cfcba 100644 (file)
@@ -82,7 +82,7 @@ Datum LWGEOM_isclosed(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(LWGEOM_get_srid);
 Datum LWGEOM_get_srid(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom=(GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom=PG_GETARG_GSERIALIZED_P(0);
        int srid = gserialized_get_srid (geom);
        PG_FREE_IF_COPY(geom,0);
        PG_RETURN_INT32(srid);
@@ -93,7 +93,7 @@ PG_FUNCTION_INFO_V1(LWGEOM_set_srid);
 Datum LWGEOM_set_srid(PG_FUNCTION_ARGS)
 {
        GSERIALIZED *result;
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        int srid = PG_GETARG_INT32(1);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        lwgeom_set_srid(lwgeom, srid);
@@ -198,7 +198,7 @@ Datum geometry_geometrytype(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_numpoints_linestring);
 Datum LWGEOM_numpoints_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        int count = -1;
        
@@ -218,7 +218,7 @@ Datum LWGEOM_numpoints_linestring(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_numgeometries_collection);
 Datum LWGEOM_numgeometries_collection(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom;
        int32 ret = 1;
 
@@ -241,7 +241,7 @@ Datum LWGEOM_numgeometries_collection(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_geometryn_collection);
 Datum LWGEOM_geometryn_collection(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        int type = gserialized_get_type(geom);
        int32 idx;
@@ -292,7 +292,7 @@ Datum LWGEOM_geometryn_collection(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_dimension);
 Datum LWGEOM_dimension(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        int dimension = -1;
 
@@ -318,7 +318,7 @@ Datum LWGEOM_dimension(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_exteriorring_polygon);
 Datum LWGEOM_exteriorring_polygon(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *result;
        POINTARRAY *extring;
        LWGEOM *lwgeom;
@@ -402,7 +402,7 @@ Datum LWGEOM_exteriorring_polygon(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_numinteriorrings_polygon);
 Datum LWGEOM_numinteriorrings_polygon(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        LWPOLY *poly = NULL;
        LWCURVEPOLY *curvepoly = NULL;
@@ -457,7 +457,7 @@ Datum LWGEOM_interiorringn_polygon(PG_FUNCTION_ARGS)
                PG_RETURN_NULL(); /* index out of range */
        }
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        type = gserialized_get_type(geom);
 
        if ( (type != POLYGONTYPE) && (type != CURVEPOLYTYPE) )
@@ -531,7 +531,7 @@ Datum LWGEOM_interiorringn_polygon(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_pointn_linestring);
 Datum LWGEOM_pointn_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        int where = PG_GETARG_INT32(1);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        LWPOINT *lwpoint = NULL;
@@ -568,7 +568,7 @@ Datum LWGEOM_x_point(PG_FUNCTION_ARGS)
        LWPOINT *point = NULL;
        POINT2D p;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( gserialized_get_type(geom) != POINTTYPE )
                lwerror("Argument to X() must be a point");
@@ -597,7 +597,7 @@ Datum LWGEOM_y_point(PG_FUNCTION_ARGS)
        LWGEOM *lwgeom;
        POINT2D p;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( gserialized_get_type(geom) != POINTTYPE )
                lwerror("Argument to Y() must be a point");
@@ -628,7 +628,7 @@ Datum LWGEOM_z_point(PG_FUNCTION_ARGS)
        LWGEOM *lwgeom;
        POINT3DZ p;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( gserialized_get_type(geom) != POINTTYPE )
                lwerror("Argument to Z() must be a point");
@@ -661,7 +661,7 @@ Datum LWGEOM_m_point(PG_FUNCTION_ARGS)
        LWGEOM *lwgeom;
        POINT3DM p;
 
-       geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
 
        if ( gserialized_get_type(geom) != POINTTYPE )
                lwerror("Argument to M() must be a point");
@@ -690,7 +690,7 @@ Datum LWGEOM_m_point(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_startpoint_linestring);
 Datum LWGEOM_startpoint_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        LWPOINT *lwpoint = NULL;
        int type = lwgeom->type;
@@ -716,7 +716,7 @@ Datum LWGEOM_startpoint_linestring(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_endpoint_linestring);
 Datum LWGEOM_endpoint_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        LWPOINT *lwpoint = NULL;
        int type = lwgeom->type;
@@ -830,7 +830,7 @@ Datum LWGEOM_asText(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(2, "Called.");
 
-       geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(geom);
 
        /* Write to WKT and free the geometry */
@@ -860,7 +860,7 @@ Datum LWGEOM_asBinary(PG_FUNCTION_ARGS)
        uint8_t variant = WKB_ISO;
 
        /* Get a 2D version of the geometry */
-       geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       geom = PG_GETARG_GSERIALIZED_P(0);
        lwgeom = lwgeom_from_gserialized(geom);
 
        /* If user specified endianness, respect it */
@@ -905,7 +905,7 @@ Datum LWGEOM_asBinary(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_isclosed);
 Datum LWGEOM_isclosed(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        int closed = lwgeom_is_closed(lwgeom);
        
index 9bb42b05c3731483cc71daf9a363ff1c1a0d6a68..0a830330421f8497e6c566d6d1289cef550a3574 100644 (file)
@@ -323,7 +323,7 @@ distance_ellipse_calculation(double lat1, double long1,
 PG_FUNCTION_INFO_V1(LWGEOM_length2d_ellipsoid);
 Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        double dist = lwgeom_length_spheroid(lwgeom, sphere);
@@ -346,7 +346,7 @@ Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_length_ellipsoid_linestring);
 Datum LWGEOM_length_ellipsoid_linestring(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1);
        double length = 0.0;
@@ -469,8 +469,8 @@ double distance_sphere_method(double lat1, double long1,double lat2,double long2
 PG_FUNCTION_INFO_V1(geometry_distance_spheroid);
 Datum geometry_distance_spheroid(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+       GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
+       GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
        SPHEROID *sphere = (SPHEROID *)PG_GETARG_POINTER(2);
        int type1 = gserialized_get_type(geom1);
        int type2 = gserialized_get_type(geom2);
index 62b882d47c05026aaa001fd954c086350a0ddc1d..8fb5257f2af83cdcfae1675e137236e9479bebec 100644 (file)
@@ -37,7 +37,7 @@ Datum LWGEOM_line_desegmentize(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(LWGEOM_has_arc);
 Datum LWGEOM_has_arc(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
        uint32 result = lwgeom_has_arc(lwgeom);
        lwgeom_free(lwgeom);
@@ -53,7 +53,7 @@ Datum LWGEOM_has_arc(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_curve_segmentize);
 Datum LWGEOM_curve_segmentize(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        int32 perQuad = PG_GETARG_INT32(1);
        GSERIALIZED *ret;
        LWGEOM *igeom = NULL, *ogeom = NULL;
@@ -84,7 +84,7 @@ Datum LWGEOM_curve_segmentize(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(LWGEOM_line_desegmentize);
 Datum LWGEOM_line_desegmentize(PG_FUNCTION_ARGS)
 {
-       GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
        GSERIALIZED *ret;
        LWGEOM *igeom = NULL, *ogeom = NULL;