[SCM] PostGIS branch master updated. 3.5.0-432-g3724e0f25

git at osgeo.org git at osgeo.org
Mon Jul 7 11:59:02 PDT 2025


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, master has been updated
       via  3724e0f256c8bd19828eda9ea0b89e330ba1ab0b (commit)
      from  6e21283f070fb16cd638046f2f14191f6a347ec3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3724e0f256c8bd19828eda9ea0b89e330ba1ab0b
Author: Paul Ramsey <paul.ramsey at snowflake.com>
Date:   Mon Jul 7 11:43:39 2025 -0700

    Simplify the internal API of the interval tree

diff --git a/liblwgeom/intervaltree.c b/liblwgeom/intervaltree.c
index 03bd52e50..5716dc3ee 100644
--- a/liblwgeom/intervaltree.c
+++ b/liblwgeom/intervaltree.c
@@ -234,10 +234,11 @@ itree_add_pointarray(IntervalTree *itree, const POINTARRAY *pa)
 }
 
 
-static void
-itree_add_polygon(IntervalTree *itree, const LWPOLY *poly)
+static IntervalTree *
+itree_from_polygon(const LWPOLY *poly)
 {
-	if (poly->nrings == 0) return;
+	IntervalTree *itree = lwalloc0(sizeof(IntervalTree));
+	if (poly->nrings == 0) return itree;
 
 	itree->maxNodes = itree_num_nodes_polygon(poly);
 	itree->nodes = lwalloc0(itree->maxNodes * sizeof(IntervalTreeNode));
@@ -260,14 +261,15 @@ itree_add_polygon(IntervalTree *itree, const LWPOLY *poly)
 		itree->ringCounts[itree->numPolys] += 1;
 	}
 	itree->numPolys = 1;
-	return;
+	return itree;
 }
 
 
-static void
-itree_add_multipolygon(IntervalTree *itree, const LWMPOLY *mpoly)
+static IntervalTree *
+itree_from_multipolygon(const LWMPOLY *mpoly)
 {
-	if (mpoly->ngeoms == 0) return;
+	IntervalTree *itree = lwalloc0(sizeof(IntervalTree));
+	if (mpoly->ngeoms == 0) return itree;
 
 	itree->maxNodes = itree_num_nodes_multipolygon(mpoly);
 	itree->nodes = lwalloc0(itree->maxNodes * sizeof(IntervalTreeNode));
@@ -300,7 +302,7 @@ itree_add_multipolygon(IntervalTree *itree, const LWMPOLY *mpoly)
 
 		itree->numPolys += 1;
 	}
-	return;
+	return itree;
 }
 
 
@@ -308,23 +310,16 @@ IntervalTree *
 itree_from_lwgeom(const LWGEOM *geom)
 {
 	if (!geom) lwerror("%s called with null geometry", __func__);
-	if (lwgeom_get_type(geom) == MULTIPOLYGONTYPE)
+	switch(lwgeom_get_type(geom))
 	{
-		IntervalTree *itree = lwalloc0(sizeof(IntervalTree));
-		itree_add_multipolygon(itree, lwgeom_as_lwmpoly(geom));
-		return itree;
-	}
-	else if (lwgeom_get_type(geom) == POLYGONTYPE)
-	{
-		IntervalTree *itree = lwalloc0(sizeof(IntervalTree));
-		itree_add_polygon(itree, lwgeom_as_lwpoly(geom));
-		return itree;
-	}
-	else
-	{
-		lwerror("%s got asked to build index on non-polygon", __func__);
-		return NULL;
+		case MULTIPOLYGONTYPE:
+			return itree_from_multipolygon(lwgeom_as_lwmpoly(geom));
+		case POLYGONTYPE:
+			return itree_from_polygon(lwgeom_as_lwpoly(geom));
+		default:
+			lwerror("%s got asked to build index on non-polygon", __func__);
 	}
+	return NULL;
 }
 
 

-----------------------------------------------------------------------

Summary of changes:
 liblwgeom/intervaltree.c | 41 ++++++++++++++++++-----------------------
 1 file changed, 18 insertions(+), 23 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list