PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ ptarray_clone_deep()

POINTARRAY* ptarray_clone_deep ( const POINTARRAY ptarray)

Deep clone a pointarray (also clones serialized pointlist)

Definition at line 626 of file ptarray.c.

627 {
628  POINTARRAY *out = lwalloc(sizeof(POINTARRAY));
629 
630  LWDEBUG(3, "ptarray_clone_deep called.");
631 
632  out->flags = in->flags;
633  out->npoints = in->npoints;
634  out->maxpoints = in->npoints;
635 
636  FLAGS_SET_READONLY(out->flags, 0);
637 
638  if (!in->npoints)
639  {
640  // Avoid calling lwalloc of 0 bytes
641  out->serialized_pointlist = NULL;
642  }
643  else
644  {
645  size_t size = in->npoints * ptarray_point_size(in);
646  out->serialized_pointlist = lwalloc(size);
647  memcpy(out->serialized_pointlist, in->serialized_pointlist, size);
648  }
649 
650  return out;
651 }
void * lwalloc(size_t size)
Definition: lwutil.c:227
#define FLAGS_SET_READONLY(flags, value)
Definition: liblwgeom.h:190
#define LWDEBUG(level, msg)
Definition: lwgeom_log.h:83
static size_t ptarray_point_size(const POINTARRAY *pa)
Definition: lwinline.h:48
lwflags_t flags
Definition: liblwgeom.h:417
uint32_t maxpoints
Definition: liblwgeom.h:414
uint32_t npoints
Definition: liblwgeom.h:413
uint8_t * serialized_pointlist
Definition: liblwgeom.h:420

References POINTARRAY::flags, FLAGS_SET_READONLY, lwalloc(), LWDEBUG, POINTARRAY::maxpoints, POINTARRAY::npoints, ptarray_point_size(), and POINTARRAY::serialized_pointlist.

Referenced by _lwt_HealEdges(), _lwt_MakeRingShell(), lwcurvepoly_construct_from_lwpoly(), lwcurvepoly_linearize(), LWGEOM_dump_rings(), lwline_clone_deep(), lwmcurve_linearize(), lwmsurface_linearize(), lwpoly_clone_deep(), lwpoly_from_lwlines(), lwtriangle_from_lwline(), parse_kml_coordinates(), and ptarray_remove_repeated_points_minpoints().

Here is the call graph for this function:
Here is the caller graph for this function: