PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ 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.
Definition: gserialized.c:268
IntervalTree * itree_from_lwgeom(const LWGEOM *geom)
Definition: intervaltree.c:310
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1218
static GeomCacheMethods IntervalTreeCacheMethods
Definition: lwgeom_itree.c:100
IntervalTree * itree
Definition: lwgeom_itree.c:55

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: