From: Sandro Santilli Date: Wed, 17 Oct 2012 13:38:49 +0000 (+0000) Subject: Get OUT_* export macros out of liblwgeom.h (#2053) X-Git-Tag: 2.1.0beta2~519 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca09cf4cc4a53a340b1ea2c7a69d7e854a450cd6;p=postgis Get OUT_* export macros out of liblwgeom.h (#2053) git-svn-id: http://svn.osgeo.org/postgis/trunk@10453 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/liblwgeom/liblwgeom.h.in b/liblwgeom/liblwgeom.h.in index ca85d8345..e213e6c4c 100644 --- a/liblwgeom/liblwgeom.h.in +++ b/liblwgeom/liblwgeom.h.in @@ -1329,14 +1329,6 @@ int lwline_crossing_direction(const LWLINE *l1, const LWLINE *l2); */ LWCOLLECTION* lwgeom_clip_to_ordinate_range(const LWGEOM *lwin, char ordinate, double from, double to, double offset); -/* - * Export functions - */ -#define OUT_MAX_DOUBLE 1E15 -#define OUT_SHOW_DIGS_DOUBLE 20 -#define OUT_MAX_DOUBLE_PRECISION 15 -#define OUT_MAX_DIGS_DOUBLE (OUT_SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */ - /** * Macros for specifying GML options. * @{ diff --git a/liblwgeom/liblwgeom_internal.h b/liblwgeom/liblwgeom_internal.h index 4b45f3c54..2a4edcda1 100644 --- a/liblwgeom/liblwgeom_internal.h +++ b/liblwgeom/liblwgeom_internal.h @@ -126,6 +126,15 @@ */ #define EPSILON_SQLMM 1e-8 +/* + * Export functions + */ +#define OUT_MAX_DOUBLE 1E15 +#define OUT_SHOW_DIGS_DOUBLE 20 +#define OUT_MAX_DOUBLE_PRECISION 15 +#define OUT_MAX_DIGS_DOUBLE (OUT_SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */ + + /** * Constants for point-in-polygon return values */ diff --git a/postgis/geography_inout.c b/postgis/geography_inout.c index f8cb5811f..bde305ac3 100644 --- a/postgis/geography_inout.c +++ b/postgis/geography_inout.c @@ -207,7 +207,7 @@ Datum geography_as_gml(PG_FUNCTION_ARGS) int version; char *srs; int srid = SRID_DEFAULT; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; int option=0; int lwopts = LW_GML_IS_DIMS; static const char *default_prefix = "gml:"; @@ -237,8 +237,9 @@ Datum geography_as_gml(PG_FUNCTION_ARGS) if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -328,7 +329,7 @@ Datum geography_as_kml(PG_FUNCTION_ARGS) char *kml; text *result; int version; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; static const char *default_prefix = ""; char *prefixbuf; const char* prefix = default_prefix; @@ -354,8 +355,9 @@ Datum geography_as_kml(PG_FUNCTION_ARGS) if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -406,7 +408,7 @@ Datum geography_as_svg(PG_FUNCTION_ARGS) char *svg; text *result; int relative = 0; - int precision=OUT_MAX_DOUBLE_PRECISION; + int precision=DBL_DIG; if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); @@ -422,8 +424,9 @@ Datum geography_as_svg(PG_FUNCTION_ARGS) if ( PG_NARGS() > 2 && ! PG_ARGISNULL(2) ) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -452,7 +455,7 @@ Datum geography_as_geojson(PG_FUNCTION_ARGS) int version; int option = 0; int has_bbox = 0; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; char * srs = NULL; /* Get the version */ @@ -474,8 +477,9 @@ Datum geography_as_geojson(PG_FUNCTION_ARGS) if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } diff --git a/postgis/lwgeom_export.c b/postgis/lwgeom_export.c index e0a551e98..644d4e797 100644 --- a/postgis/lwgeom_export.c +++ b/postgis/lwgeom_export.c @@ -14,6 +14,7 @@ * Commons functions for all export functions */ +#include "float.h" /* for DBL_DIG */ #include "postgres.h" #include "executor/spi.h" @@ -171,7 +172,7 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS) int srid; int option = 0; int lwopts = LW_GML_IS_DIMS; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; static const char* default_prefix = "gml:"; /* default prefix */ const char* prefix = default_prefix; const char* gml_id = NULL; @@ -194,8 +195,9 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS) if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom ? */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -285,7 +287,7 @@ Datum LWGEOM_asKML(PG_FUNCTION_ARGS) char *kml; text *result; int version; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; static const char* default_prefix = ""; /* default prefix */ char *prefixbuf; const char* prefix = default_prefix; @@ -307,9 +309,10 @@ Datum LWGEOM_asKML(PG_FUNCTION_ARGS) /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { + /* TODO: leave this to liblwgeom ? */ precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -363,7 +366,7 @@ Datum LWGEOM_asGeoJson(PG_FUNCTION_ARGS) int version; int option = 0; int has_bbox = 0; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; char * srs = NULL; /* Get the version */ @@ -382,8 +385,8 @@ Datum LWGEOM_asGeoJson(PG_FUNCTION_ARGS) if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -441,7 +444,7 @@ Datum LWGEOM_asSVG(PG_FUNCTION_ARGS) char *svg; text *result; int relative = 0; - int precision=OUT_MAX_DOUBLE_PRECISION; + int precision=DBL_DIG; if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); @@ -454,8 +457,9 @@ Datum LWGEOM_asSVG(PG_FUNCTION_ARGS) if ( PG_NARGS() > 2 && ! PG_ARGISNULL(2) ) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom ? */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } @@ -485,7 +489,7 @@ Datum LWGEOM_asX3D(PG_FUNCTION_ARGS) int option = 0; int is_deegree = 0; int is_dims = 1; - int precision = OUT_MAX_DOUBLE_PRECISION; + int precision = DBL_DIG; static const char* default_defid = "x3d:"; /* default defid */ char *defidbuf; const char* defid = default_defid; @@ -507,8 +511,9 @@ Datum LWGEOM_asX3D(PG_FUNCTION_ARGS) if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); - if ( precision > OUT_MAX_DOUBLE_PRECISION ) - precision = OUT_MAX_DOUBLE_PRECISION; + /* TODO: leave this to liblwgeom ? */ + if ( precision > DBL_DIG ) + precision = DBL_DIG; else if ( precision < 0 ) precision = 0; }