8
/* #define PGIS_DEBUG_ALLOCS 1 */
12
#define DEFAULT_CONTEXT CONTEXT_SA
14
#define DEFAULT_CONTEXT CONTEXT_PG
17
/* Global variables */
18
#if DEFAULT_CONTEXT == CONTEXT_SA
19
#include "liblwgeom.h"
20
lwallocator lwalloc_var = default_allocator;
21
lwreallocator lwrealloc_var = default_reallocator;
22
lwfreeor lwfree_var = default_freeor;
23
lwreporter lwerror = default_errorreporter;
24
lwreporter lwnotice = default_noticereporter;
26
#include "lwgeom_pg.h"
27
#include "liblwgeom.h"
29
lwallocator lwalloc_var = pg_alloc;
30
lwreallocator lwrealloc_var = pg_realloc;
31
lwfreeor lwfree_var = pg_free;
32
lwreporter lwerror = pg_error;
33
lwreporter lwnotice = pg_notice;
36
static char *lwgeomTypeName[] = {
47
"Invalid Type", /* POINTTYPEI */
48
"Invalid Type", /* LINETYPEI */
49
"Invalid Type", /* POLYTYPEI */
56
default_allocator(size_t size)
58
void *mem = malloc(size);
63
default_freeor(void *mem)
69
default_reallocator(void *mem, size_t size)
71
void *ret = realloc(mem, size);
76
default_noticereporter(const char *fmt, ...)
84
* This is a GNU extension.
85
* Dunno how to handle errors here.
87
if (!vasprintf (&msg, fmt, ap))
98
default_errorreporter(const char *fmt, ...)
106
* This is a GNU extension.
107
* Dunno how to handle errors here.
109
if (!vasprintf (&msg, fmt, ap))
114
fprintf(stderr, "%s\n", msg);
121
lwgeom_typename(int type)
123
// something went wrong somewhere
124
if ( type < 0 || type > 15 ) {
126
return "Invalid type";
128
return lwgeomTypeName[type];
134
#ifdef PGIS_DEBUG_ALLOCS
135
void *mem = lwalloc_var(size);
136
lwnotice("lwalloc: %d@%p", size, mem);
138
#else /* ! PGIS_DEBUG_ALLOCS */
139
return lwalloc_var(size);
144
lwrealloc(void *mem, size_t size)
146
#ifdef PGIS_DEBUG_ALLOCS
147
lwnotice("lwrealloc: %d@%p", size, mem);
149
return lwrealloc_var(mem, size);
159
* Removes trailing zeros and dot for a %f formatted number.
163
trim_trailing_zeros(char *str)
165
char *ptr, *totrim=NULL;
170
lwnotice("input: %s", str);
173
ptr = strchr(str, '.');
174
if ( ! ptr ) return; /* no dot, no decimal digits */
177
lwnotice("ptr: %s", ptr);
181
for (i=len-1; i; i--)
183
if ( ptr[i] != '0' ) break;
188
if ( ptr == totrim-1 ) *ptr = '\0';
193
lwnotice("output: %s", str);
198
getMachineEndian(void)
200
static int endian_check_int = 1; /* dont modify this!!! */
202
return *((char *) &endian_check_int); /* 0 = big endian | xdr,
203
* 1 = little endian | ndr
209
errorIfSRIDMismatch(int srid1, int srid2)
211
if ( srid1 != srid2 )
213
lwerror("Operation on mixed SRID geometries");