}
-/**
-* Builder, freeer and public accessor for cached CIRC_NODE trees
-*/
-static int
-CircTreeBuilder(const LWGEOM* lwgeom, GeomCache* cache)
-{
- CircTreeGeomCache* circ_cache = (CircTreeGeomCache*)cache;
- CIRC_NODE* tree = lwgeom_calculate_circ_tree(lwgeom);
-
- if ( circ_cache->index )
- {
- circ_tree_free(circ_cache->index);
- circ_cache->index = 0;
- }
- if ( ! tree )
- return LW_FAILURE;
-
- circ_cache->index = tree;
- return LW_SUCCESS;
-}
-
-static int
-CircTreeFreer(GeomCache* cache)
-{
- CircTreeGeomCache* circ_cache = (CircTreeGeomCache*)cache;
- if ( circ_cache->index )
- {
- circ_tree_free(circ_cache->index);
- circ_cache->index = 0;
- circ_cache->argnum = 0;
- }
- return LW_SUCCESS;
-}
-
-static GeomCache*
-CircTreeAllocator(void)
-{
- CircTreeGeomCache* cache = palloc(sizeof(CircTreeGeomCache));
- memset(cache, 0, sizeof(CircTreeGeomCache));
- return (GeomCache*)cache;
-}
-
-static GeomCacheMethods CircTreeCacheMethods =
-{
- CIRC_CACHE_ENTRY,
- CircTreeBuilder,
- CircTreeFreer,
- CircTreeAllocator
-};
-
-CIRC_NODE*
-GetCircTree(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, int* argnum_of_cache)
-{
- CircTreeGeomCache* cache = (CircTreeGeomCache*)GetGeomCache(fcinfo, &CircTreeCacheMethods, g1, g2);
-
- if ( ! cache )
- return NULL;
-
- if ( argnum_of_cache )
- *argnum_of_cache = cache->argnum;
-
- return cache->index;
-}
-
-CircTreeGeomCache*
-GetCircTreeGeomCache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2)
-{
- return (CircTreeGeomCache*)GetGeomCache(fcinfo, &CircTreeCacheMethods, g1, g2);
-}
-
-
#include "fmgr.h"
#include "liblwgeom_internal.h"
-#include "lwgeodetic.h"
#include "lwgeodetic_tree.h"
-
#include "lwgeom_pg.h"
int32 argnum;
} GeomCache;
-/*
-* Specific tree types include all the generic slots and
-* their own slots for their trees. We put the implementation
-* for the CircTreeGeomCache here because we can't shove
-* the PgSQL specific bits of the code (fcinfo) back into
-* liblwgeom, where most of the circtree logic lives.
-*/
-typedef struct {
- int type; // <GeomCache>
- GSERIALIZED* geom1; //
- GSERIALIZED* geom2; //
- size_t geom1_size; //
- size_t geom2_size; //
- int32 argnum; // </GeomCache>
- CIRC_NODE* index;
-} CircTreeGeomCache;
-
/*
* Other specific geometry cache types are the
* RTreeGeomCache - lwgeom_rtree.h
*/
PROJ4PortalCache* GetPROJ4SRSCache(FunctionCallInfoData *fcinfo);
GeomCache* GetGeomCache(FunctionCallInfoData *fcinfo, const GeomCacheMethods* cache_methods, const GSERIALIZED* g1, const GSERIALIZED* g2);
-CIRC_NODE* GetCircTree(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, int* argnum_of_cache);
-CircTreeGeomCache* GetCircTreeGeomCache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2);
-
-
#endif /* LWGEOM_CACHE_H_ */
geography_btree.o \
geography_estimate.o \
geography_measurement.o \
+ geography_measurement_trees.o \
geometry_estimate.o
# Objects to build using PGXS
--- /dev/null
+#include "geography_measurement_trees.h"
+
+/**
+* Builder, freeer and public accessor for cached CIRC_NODE trees
+*/
+static int
+CircTreeBuilder(const LWGEOM* lwgeom, GeomCache* cache)
+{
+ CircTreeGeomCache* circ_cache = (CircTreeGeomCache*)cache;
+ CIRC_NODE* tree = lwgeom_calculate_circ_tree(lwgeom);
+
+ if ( circ_cache->index )
+ {
+ circ_tree_free(circ_cache->index);
+ circ_cache->index = 0;
+ }
+ if ( ! tree )
+ return LW_FAILURE;
+
+ circ_cache->index = tree;
+ return LW_SUCCESS;
+}
+
+static int
+CircTreeFreer(GeomCache* cache)
+{
+ CircTreeGeomCache* circ_cache = (CircTreeGeomCache*)cache;
+ if ( circ_cache->index )
+ {
+ circ_tree_free(circ_cache->index);
+ circ_cache->index = 0;
+ circ_cache->argnum = 0;
+ }
+ return LW_SUCCESS;
+}
+
+static GeomCache*
+CircTreeAllocator(void)
+{
+ CircTreeGeomCache* cache = palloc(sizeof(CircTreeGeomCache));
+ memset(cache, 0, sizeof(CircTreeGeomCache));
+ return (GeomCache*)cache;
+}
+
+static GeomCacheMethods CircTreeCacheMethods =
+{
+ CIRC_CACHE_ENTRY,
+ CircTreeBuilder,
+ CircTreeFreer,
+ CircTreeAllocator
+};
+
+CircTreeGeomCache*
+GetCircTreeGeomCache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2)
+{
+ return (CircTreeGeomCache*)GetGeomCache(fcinfo, &CircTreeCacheMethods, g1, g2);
+}
+
--- /dev/null
+#include "liblwgeom_internal.h"
+#include "lwgeodetic_tree.h"
+#include "lwgeom_cache.h"
+
+/*
+* Specific tree types include all the generic slots and
+* their own slots for their trees. We put the implementation
+* for the CircTreeGeomCache here because we can't shove
+* the PgSQL specific bits of the code (fcinfo) back into
+* liblwgeom, where most of the circtree logic lives.
+*/
+typedef struct {
+ int type; // <GeomCache>
+ GSERIALIZED* geom1; //
+ GSERIALIZED* geom2; //
+ size_t geom1_size; //
+ size_t geom2_size; //
+ int32 argnum; // </GeomCache>
+ CIRC_NODE* index;
+} CircTreeGeomCache;
+
+
+
+CircTreeGeomCache* GetCircTreeGeomCache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2);