PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ GetIntervalTree()

IntervalTree * GetIntervalTree ( FunctionCallInfo  fcinfo,
SHARED_GSERIALIZED *  g1 
)

Checks for a cache hit against the provided geometry and returns a pre-built index structure (RTREE_POLY_CACHE) if one exists.

Otherwise builds a new one and returns that.

Definition at line 114 of file lwgeom_itree.c.

115{
116 const GSERIALIZED *poly1;
117 LWGEOM *lwpoly1;
118
119 IntervalTree *itree = NULL;
120 IntervalTreeGeomCache *cache = (IntervalTreeGeomCache*)GetGeomCache(fcinfo, &IntervalTreeCacheMethods, g1, NULL);
121
122 /* Found a cached tree */
123 if (cache && cache->itree)
124 return cache->itree;
125
126 /* Build one on the fly */
127 poly1 = shared_gserialized_get(g1);
128 lwpoly1 = lwgeom_from_gserialized(poly1);
129 itree = itree_from_lwgeom(lwpoly1);
130 lwgeom_free(lwpoly1);
131 return itree;
132}
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
IntervalTree * itree_from_lwgeom(const LWGEOM *geom)
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
static GeomCacheMethods IntervalTreeCacheMethods
IntervalTree * itree

References IntervalTreeCacheMethods, IntervalTreeGeomCache::itree, itree_from_lwgeom(), lwgeom_free(), and lwgeom_from_gserialized().

Referenced by contains(), coveredby(), covers(), ST_Intersects(), and within().

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