LWCOLLECTION *lwcollection_clone(const LWCOLLECTION *lwgeom);
LWCIRCSTRING *lwcircstring_clone(const LWCIRCSTRING *curve);
BOX2DFLOAT4 *box2d_clone(const BOX2DFLOAT4 *lwgeom);
-POINTARRAY *ptarray_clone(const POINTARRAY *ptarray);
+POINTARRAY *ptarray_clone_deep(const POINTARRAY *ptarray);
LWLINE *lwline_clone_deep(const LWLINE *lwgeom);
LWPOLY *lwpoly_clone_deep(const LWPOLY *lwgeom);
LWCOLLECTION *lwcollection_clone_deep(const LWCOLLECTION *lwgeom);
/* clone internal rings */
for (i=0 ; i < tgeom->faces[tgeom->nfaces]->nrings ; i++)
tgeom->faces[tgeom->nfaces]->rings[i]
- = ptarray_clone(poly->rings[i+1]);
+ = ptarray_clone_deep(poly->rings[i+1]);
tgeom->nfaces++;
memcpy(ret, g, sizeof(LWLINE));
if ( g->bbox ) ret->bbox = gbox_copy(g->bbox);
- if ( g->points ) ret->points = ptarray_clone(g->points);
+ if ( g->points ) ret->points = ptarray_clone_deep(g->points);
FLAGS_SET_READONLY(ret->flags,0);
return ret;
ret->rings = lwalloc(sizeof(POINTARRAY *)*g->nrings);
for ( i = 0; i < ret->nrings; i++ )
{
- ret->rings[i] = ptarray_clone(g->rings[i]);
+ ret->rings[i] = ptarray_clone_deep(g->rings[i]);
}
FLAGS_SET_READONLY(ret->flags,0);
return ret;
lwerror("lwpoly_from_lwlines: shell must have at least 4 points");
if ( ! ptarray_isclosed2d(shell->points) )
lwerror("lwpoly_from_lwlines: shell must be closed");
- rings[0] = ptarray_clone(shell->points);
+ rings[0] = ptarray_clone_deep(shell->points);
for (nrings=1; nrings<=nholes; nrings++)
{
if ( ! ptarray_isclosed2d(hole->points) )
lwerror("lwpoly_from_lwlines: holes must be closed");
- rings[nrings] = ptarray_clone(hole->points);
+ rings[nrings] = ptarray_clone_deep(hole->points);
}
ret = lwpoly_construct(srid, NULL, nrings, rings);
if (tmp->type == CIRCSTRINGTYPE)
{
line = lwcircstring_segmentize((LWCIRCSTRING *)tmp, perQuad);
- ptarray[i] = ptarray_clone(line->points);
+ ptarray[i] = ptarray_clone_deep(line->points);
lwfree(line);
}
else if (tmp->type == LINETYPE)
{
line = (LWLINE *)tmp;
- ptarray[i] = ptarray_clone(line->points);
+ ptarray[i] = ptarray_clone_deep(line->points);
}
else if (tmp->type == COMPOUNDTYPE)
{
line = lwcompound_segmentize((LWCOMPOUND *)tmp, perQuad);
- ptarray[i] = ptarray_clone(line->points);
+ ptarray[i] = ptarray_clone_deep(line->points);
lwfree(line);
}
else
}
else if (tmp->type == LINETYPE)
{
- lines[i] = (LWGEOM *)lwline_construct(mcurve->srid, NULL, ptarray_clone(((LWLINE *)tmp)->points));
+ lines[i] = (LWGEOM *)lwline_construct(mcurve->srid, NULL, ptarray_clone_deep(((LWLINE *)tmp)->points));
}
else
{
ptarray = lwalloc(sizeof(POINTARRAY *)*poly->nrings);
for (j = 0; j < poly->nrings; j++)
{
- ptarray[j] = ptarray_clone(poly->rings[j]);
+ ptarray[j] = ptarray_clone_deep(poly->rings[j]);
}
polys[i] = (LWGEOM *)lwpoly_construct(msurface->srid, NULL, poly->nrings, ptarray);
}
(FLAGS_GET_Z(shell->flags) && !ptarray_isclosed3d(shell->points)) )
lwerror("lwtriangle_from_lwline: shell must be closed");
- pa = ptarray_clone(shell->points);
+ pa = ptarray_clone_deep(shell->points);
ret = lwtriangle_construct(shell->srid, NULL, pa);
if (lwtriangle_is_repeated_points(ret))
* @brief Clone a pointarray
*/
POINTARRAY *
-ptarray_clone(const POINTARRAY *in)
+ptarray_clone_deep(const POINTARRAY *in)
{
POINTARRAY *out = lwalloc(sizeof(POINTARRAY));
size_t size;
- LWDEBUG(3, "ptarray_clone called.");
+ LWDEBUG(3, "ptarray_clone_deep called.");
out->flags = in->flags;
out->npoints = in->npoints;
LWDEBUG(3, "ptarray_remove_repeated_points called.");
/* Single or zero point arrays can't have duplicates */
- if ( in->npoints < 3 ) return ptarray_clone(in);
+ if ( in->npoints < 3 ) return ptarray_clone_deep(in);
ptsize = ptarray_point_size(in);
oldcontext = MemoryContextSwitchTo(newcontext);
/* We need a copy of input ring here */
- ring = ptarray_clone(poly->rings[state->ringnum]);
+ ring = ptarray_clone_deep(poly->rings[state->ringnum]);
/* Construct another polygon with shell only */
ringgeom = (LWGEOM*)lwpoly_construct(
outgeom = pglwgeom_serialize(outlwgeom);
- //lwgeom_free(outlwgeom); /* TODO fix lwgeom_clone / ptarray_clone for consistent semantics */
+ //lwgeom_free(outlwgeom); /* TODO fix lwgeom_clone / ptarray_clone_deep for consistent semantics */
lwgeom_free(inlwgeom);
PG_FREE_IF_COPY(ingeom, 0);
/* TODO: this makes no sense, we shouldn't have to clone. but we're seeing
memory problems when we don't. */
- return ptarray_clone(dpa);
+ return ptarray_clone_deep(dpa);
}
ptarray_append_point(dpa, &p, REPEATED_POINTS_NOT_OK);
x = y = z = false;
- return ptarray_clone(dpa);
+ return ptarray_clone_deep(dpa);
}
ptarray_append_point(dpa, &pt, REPEATED_POINTS_NOT_OK);
}
- return ptarray_clone(dpa);
+ return ptarray_clone_deep(dpa);
}
xmlFree(gmlposlist);
- return ptarray_clone(dpa);
+ return ptarray_clone_deep(dpa);
}
xmlFree(kml_coord);
/* TODO: we shouldn't need to clone here */
- return ptarray_clone(dpa);
+ return ptarray_clone_deep(dpa);
}