]> granicus.if.org Git - postgis/commitdiff
#3376, make arguments to repeated point removal be const
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 25 Nov 2015 20:31:26 +0000 (20:31 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 25 Nov 2015 20:31:26 +0000 (20:31 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@14428 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/liblwgeom.h.in
liblwgeom/liblwgeom_internal.h
liblwgeom/lwcollection.c
liblwgeom/lwgeom.c
liblwgeom/lwline.c
liblwgeom/lwmpoint.c
liblwgeom/lwpoly.c
liblwgeom/ptarray.c
postgis/lwgeom_functions_basic.c

index 414c6e625a361fc4714d3d860c8adc7cc58c104c..fe5477710b573eb5ec23bd75bad33e1eadbd8fd2 100644 (file)
@@ -1571,7 +1571,7 @@ extern int lwgeom_covers_lwgeom_sphere(const LWGEOM *lwgeom1, const LWGEOM *lwge
 /**
 * Remove repeated points!
 */
-extern LWGEOM* lwgeom_remove_repeated_points(LWGEOM *in, double tolerance);
+extern LWGEOM* lwgeom_remove_repeated_points(const LWGEOM *in, double tolerance);
 
 extern char lwtriangle_is_repeated_points(LWTRIANGLE *triangle);
 
index 5d12d3cdf0b958ec561d9ceb4495fbeaae1c3262..d09f80b62a84d1c2d4d2e39e84fc1d1ba4c8ade9 100644 (file)
@@ -344,12 +344,12 @@ void closest_point_on_segment(const POINT4D *R, const POINT4D *A, const POINT4D
 /* 
 * Repeated points
 */
-POINTARRAY *ptarray_remove_repeated_points_minpoints(POINTARRAY *in, double tolerance, int minpoints);
-POINTARRAY *ptarray_remove_repeated_points(POINTARRAY *in, double tolerance);
-LWGEOM* lwmpoint_remove_repeated_points(LWMPOINT *in, double tolerance);
-LWGEOM* lwline_remove_repeated_points(LWLINE *in, double tolerance);
-LWGEOM* lwcollection_remove_repeated_points(LWCOLLECTION *in, double tolerance);
-LWGEOM* lwpoly_remove_repeated_points(LWPOLY *in, double tolerance);
+POINTARRAY *ptarray_remove_repeated_points_minpoints(const POINTARRAY *in, double tolerance, int minpoints);
+POINTARRAY *ptarray_remove_repeated_points(const POINTARRAY *in, double tolerance);
+LWGEOM* lwmpoint_remove_repeated_points(const LWMPOINT *in, double tolerance);
+LWGEOM* lwline_remove_repeated_points(const LWLINE *in, double tolerance);
+LWGEOM* lwcollection_remove_repeated_points(const LWCOLLECTION *in, double tolerance);
+LWGEOM* lwpoly_remove_repeated_points(const LWPOLY *in, double tolerance);
 
 /*
 * Closure test
index be254dc89c601784ccb80237476dacdf9a125410..bc57a8e2bd30808ef90671ee36cc92e0888a800e 100644 (file)
@@ -437,7 +437,7 @@ LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type)
 }
 
 LWGEOM*
-lwcollection_remove_repeated_points(LWCOLLECTION *coll, double tolerance)
+lwcollection_remove_repeated_points(const LWCOLLECTION *coll, double tolerance)
 {
        uint32_t i;
        LWGEOM **newgeoms;
index 08deb5d60e856af27e60617420db82888eaffcd3..1f4beb4c3a7eed1a7e5d47fb0ef79c42b21733f9 100644 (file)
@@ -1404,7 +1404,7 @@ extern int lwgeom_dimensionality(LWGEOM *geom)
        return 0;
 }
 
-extern LWGEOM* lwgeom_remove_repeated_points(LWGEOM *in, double tolerance)
+extern LWGEOM* lwgeom_remove_repeated_points(const LWGEOM *in, double tolerance)
 {
        LWDEBUGF(4, "lwgeom_remove_repeated_points got type %s",
                 lwtype_name(in->type));
@@ -1436,7 +1436,7 @@ extern LWGEOM* lwgeom_remove_repeated_points(LWGEOM *in, double tolerance)
        case TRIANGLETYPE:
        case TINTYPE:
                /* No point is repeated for a single point, or for Triangle or TIN */
-               return in;
+               return lwgeom_clone_deep(in);
 
        case CIRCSTRINGTYPE:
        case COMPOUNDTYPE:
@@ -1444,12 +1444,12 @@ extern LWGEOM* lwgeom_remove_repeated_points(LWGEOM *in, double tolerance)
        case CURVEPOLYTYPE:
        case MULTISURFACETYPE:
                /* Dunno how to handle these, will return untouched */
-               return in;
+               return lwgeom_clone_deep(in);
 
        default:
                lwnotice("%s: unsupported geometry type: %s",
                         __func__, lwtype_name(in->type));
-               return in;
+               return lwgeom_clone_deep(in);
                break;
        }
        return 0;
index cfd4d3f5a9379fa2e2c23d0f82779e6e615af51e..58540cc7cac57b28f14485df70a8a111e52b73bd 100644 (file)
@@ -424,7 +424,7 @@ lwline_measured_from_lwline(const LWLINE *lwline, double m_start, double m_end)
 }
 
 LWGEOM*
-lwline_remove_repeated_points(LWLINE *lwline, double tolerance)
+lwline_remove_repeated_points(const LWLINE *lwline, double tolerance)
 {
        POINTARRAY* npts = ptarray_remove_repeated_points_minpoints(lwline->points, tolerance, 2);
 
index 17b5bac535068982de811e110edeee999b304fb9..6d0ff1f26007e44b322c80813f029a45ace87650 100644 (file)
@@ -76,7 +76,7 @@ void lwmpoint_free(LWMPOINT *mpt)
 }
 
 LWGEOM*
-lwmpoint_remove_repeated_points(LWMPOINT *mpoint, double tolerance)
+lwmpoint_remove_repeated_points(const LWMPOINT *mpoint, double tolerance)
 {
        uint32_t nnewgeoms;
        uint32_t i, j;
index fee37ffb3c51f2516735478ec007accc74c4c8c1..fcc1cfc39429198cf6d0316617340d045a66e921 100644 (file)
@@ -286,7 +286,7 @@ lwpoly_from_lwlines(const LWLINE *shell,
 }
 
 LWGEOM*
-lwpoly_remove_repeated_points(LWPOLY *poly, double tolerance)
+lwpoly_remove_repeated_points(const LWPOLY *poly, double tolerance)
 {
        uint32_t i;
        POINTARRAY **newrings;
index a3ad34a438430d5dcb3ac2de9fd6d5b5d30a75a6..69cf99e2511d23a2de9178c7f6e76b23bf7ad679 100644 (file)
@@ -1400,7 +1400,7 @@ ptarray_longitude_shift(POINTARRAY *pa)
  *
  */
 POINTARRAY *
-ptarray_remove_repeated_points_minpoints(POINTARRAY *in, double tolerance, int minpoints)
+ptarray_remove_repeated_points_minpoints(const POINTARRAY *in, double tolerance, int minpoints)
 {
        POINTARRAY* out;
        size_t ptsize;
@@ -1451,7 +1451,7 @@ ptarray_remove_repeated_points_minpoints(POINTARRAY *in, double tolerance, int m
 }
 
 POINTARRAY *
-ptarray_remove_repeated_points(POINTARRAY *in, double tolerance)
+ptarray_remove_repeated_points(const POINTARRAY *in, double tolerance)
 {
        return ptarray_remove_repeated_points_minpoints(in, tolerance, 2);
 }
index c2345937c7e43d1e77144fcc07c91bb92c9ba2ee..1dcdd34ca54d71acd5d5c363192075084696e0f1 100644 (file)
@@ -2607,7 +2607,10 @@ Datum ST_RemoveRepeatedPoints(PG_FUNCTION_ARGS)
        g_out = geometry_serialize(lwgeom_out);
 
        if ( lwgeom_out != lwgeom_in )
+       {
                lwgeom_free(lwgeom_out);
+       }
+
        lwgeom_free(lwgeom_in);
 
        PG_FREE_IF_COPY(g_in, 0);