Coverage Report

Created: 2025-06-15 06:31

/src/postgres/src/include/utils/geo_decls.h
Line
Count
Source (jump to first uncovered line)
1
/*-------------------------------------------------------------------------
2
 *
3
 * geo_decls.h - Declarations for various 2D constructs.
4
 *
5
 *
6
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7
 * Portions Copyright (c) 1994, Regents of the University of California
8
 *
9
 * src/include/utils/geo_decls.h
10
 *
11
 *    XXX These routines were not written by a numerical analyst.
12
 *
13
 *    XXX I have made some attempt to flesh out the operators
14
 *    and data types. There are still some more to do. - tgl 97/04/19
15
 *
16
 *-------------------------------------------------------------------------
17
 */
18
#ifndef GEO_DECLS_H
19
#define GEO_DECLS_H
20
21
#include <math.h>
22
23
#include "fmgr.h"
24
25
/*--------------------------------------------------------------------
26
 * Useful floating point utilities and constants.
27
 *--------------------------------------------------------------------
28
 *
29
 * "Fuzzy" floating-point comparisons: values within EPSILON of each other
30
 * are considered equal.  Beware of normal reasoning about the behavior of
31
 * these comparisons, since for example FPeq does not behave transitively.
32
 *
33
 * Note that these functions are not NaN-aware and will give FALSE for
34
 * any case involving NaN inputs.
35
 *
36
 * Also note that these will give sane answers for infinite inputs,
37
 * where it's important to avoid computing Inf minus Inf; we do so
38
 * by eliminating equality cases before subtracting.
39
 */
40
41
0
#define EPSILON         1.0E-06
42
43
#ifdef EPSILON
44
0
#define FPzero(A)       (fabs(A) <= EPSILON)
45
46
static inline bool
47
FPeq(double A, double B)
48
0
{
49
0
  return A == B || fabs(A - B) <= EPSILON;
50
0
}
Unexecuted instantiation: reloptions.c:FPeq
Unexecuted instantiation: gistproc.c:FPeq
Unexecuted instantiation: spgdoinsert.c:FPeq
Unexecuted instantiation: spginsert.c:FPeq
Unexecuted instantiation: spgkdtreeproc.c:FPeq
Unexecuted instantiation: spgproc.c:FPeq
Unexecuted instantiation: spgquadtreeproc.c:FPeq
Unexecuted instantiation: spgscan.c:FPeq
Unexecuted instantiation: spgutils.c:FPeq
Unexecuted instantiation: spgvacuum.c:FPeq
Unexecuted instantiation: spgxlog.c:FPeq
Unexecuted instantiation: geo_ops.c:FPeq
Unexecuted instantiation: geo_spgist.c:FPeq
51
52
static inline bool
53
FPne(double A, double B)
54
0
{
55
0
  return A != B && fabs(A - B) > EPSILON;
56
0
}
Unexecuted instantiation: reloptions.c:FPne
Unexecuted instantiation: gistproc.c:FPne
Unexecuted instantiation: spgdoinsert.c:FPne
Unexecuted instantiation: spginsert.c:FPne
Unexecuted instantiation: spgkdtreeproc.c:FPne
Unexecuted instantiation: spgproc.c:FPne
Unexecuted instantiation: spgquadtreeproc.c:FPne
Unexecuted instantiation: spgscan.c:FPne
Unexecuted instantiation: spgutils.c:FPne
Unexecuted instantiation: spgvacuum.c:FPne
Unexecuted instantiation: spgxlog.c:FPne
Unexecuted instantiation: geo_ops.c:FPne
Unexecuted instantiation: geo_spgist.c:FPne
57
58
static inline bool
59
FPlt(double A, double B)
60
0
{
61
0
  return A + EPSILON < B;
62
0
}
Unexecuted instantiation: reloptions.c:FPlt
Unexecuted instantiation: gistproc.c:FPlt
Unexecuted instantiation: spgdoinsert.c:FPlt
Unexecuted instantiation: spginsert.c:FPlt
Unexecuted instantiation: spgkdtreeproc.c:FPlt
Unexecuted instantiation: spgproc.c:FPlt
Unexecuted instantiation: spgquadtreeproc.c:FPlt
Unexecuted instantiation: spgscan.c:FPlt
Unexecuted instantiation: spgutils.c:FPlt
Unexecuted instantiation: spgvacuum.c:FPlt
Unexecuted instantiation: spgxlog.c:FPlt
Unexecuted instantiation: geo_ops.c:FPlt
Unexecuted instantiation: geo_spgist.c:FPlt
63
64
static inline bool
65
FPle(double A, double B)
66
0
{
67
0
  return A <= B + EPSILON;
68
0
}
Unexecuted instantiation: reloptions.c:FPle
Unexecuted instantiation: gistproc.c:FPle
Unexecuted instantiation: spgdoinsert.c:FPle
Unexecuted instantiation: spginsert.c:FPle
Unexecuted instantiation: spgkdtreeproc.c:FPle
Unexecuted instantiation: spgproc.c:FPle
Unexecuted instantiation: spgquadtreeproc.c:FPle
Unexecuted instantiation: spgscan.c:FPle
Unexecuted instantiation: spgutils.c:FPle
Unexecuted instantiation: spgvacuum.c:FPle
Unexecuted instantiation: spgxlog.c:FPle
Unexecuted instantiation: geo_ops.c:FPle
Unexecuted instantiation: geo_spgist.c:FPle
69
70
static inline bool
71
FPgt(double A, double B)
72
0
{
73
0
  return A > B + EPSILON;
74
0
}
Unexecuted instantiation: reloptions.c:FPgt
Unexecuted instantiation: gistproc.c:FPgt
Unexecuted instantiation: spgdoinsert.c:FPgt
Unexecuted instantiation: spginsert.c:FPgt
Unexecuted instantiation: spgkdtreeproc.c:FPgt
Unexecuted instantiation: spgproc.c:FPgt
Unexecuted instantiation: spgquadtreeproc.c:FPgt
Unexecuted instantiation: spgscan.c:FPgt
Unexecuted instantiation: spgutils.c:FPgt
Unexecuted instantiation: spgvacuum.c:FPgt
Unexecuted instantiation: spgxlog.c:FPgt
Unexecuted instantiation: geo_ops.c:FPgt
Unexecuted instantiation: geo_spgist.c:FPgt
75
76
static inline bool
77
FPge(double A, double B)
78
0
{
79
0
  return A + EPSILON >= B;
80
0
}
Unexecuted instantiation: reloptions.c:FPge
Unexecuted instantiation: gistproc.c:FPge
Unexecuted instantiation: spgdoinsert.c:FPge
Unexecuted instantiation: spginsert.c:FPge
Unexecuted instantiation: spgkdtreeproc.c:FPge
Unexecuted instantiation: spgproc.c:FPge
Unexecuted instantiation: spgquadtreeproc.c:FPge
Unexecuted instantiation: spgscan.c:FPge
Unexecuted instantiation: spgutils.c:FPge
Unexecuted instantiation: spgvacuum.c:FPge
Unexecuted instantiation: spgxlog.c:FPge
Unexecuted instantiation: geo_ops.c:FPge
Unexecuted instantiation: geo_spgist.c:FPge
81
#else
82
#define FPzero(A)       ((A) == 0)
83
#define FPeq(A,B)       ((A) == (B))
84
#define FPne(A,B)       ((A) != (B))
85
#define FPlt(A,B)       ((A) < (B))
86
#define FPle(A,B)       ((A) <= (B))
87
#define FPgt(A,B)       ((A) > (B))
88
#define FPge(A,B)       ((A) >= (B))
89
#endif
90
91
0
#define HYPOT(A, B)       pg_hypot(A, B)
92
93
/*---------------------------------------------------------------------
94
 * Point - (x,y)
95
 *-------------------------------------------------------------------*/
96
typedef struct
97
{
98
  float8    x,
99
        y;
100
} Point;
101
102
103
/*---------------------------------------------------------------------
104
 * LSEG - A straight line, specified by endpoints.
105
 *-------------------------------------------------------------------*/
106
typedef struct
107
{
108
  Point   p[2];
109
} LSEG;
110
111
112
/*---------------------------------------------------------------------
113
 * PATH - Specified by vertex points.
114
 *-------------------------------------------------------------------*/
115
typedef struct
116
{
117
  int32   vl_len_;    /* varlena header (do not touch directly!) */
118
  int32   npts;
119
  int32   closed;     /* is this a closed polygon? */
120
  int32   dummy;      /* padding to make it double align */
121
  Point   p[FLEXIBLE_ARRAY_MEMBER];
122
} PATH;
123
124
125
/*---------------------------------------------------------------------
126
 * LINE - Specified by its general equation (Ax+By+C=0).
127
 *-------------------------------------------------------------------*/
128
typedef struct
129
{
130
  float8    A,
131
        B,
132
        C;
133
} LINE;
134
135
136
/*---------------------------------------------------------------------
137
 * BOX  - Specified by two corner points, which are
138
 *     sorted to save calculation time later.
139
 *-------------------------------------------------------------------*/
140
typedef struct
141
{
142
  Point   high,
143
        low;      /* corner POINTs */
144
} BOX;
145
146
/*---------------------------------------------------------------------
147
 * POLYGON - Specified by an array of doubles defining the points,
148
 *    keeping the number of points and the bounding box for
149
 *    speed purposes.
150
 *-------------------------------------------------------------------*/
151
typedef struct
152
{
153
  int32   vl_len_;    /* varlena header (do not touch directly!) */
154
  int32   npts;
155
  BOX     boundbox;
156
  Point   p[FLEXIBLE_ARRAY_MEMBER];
157
} POLYGON;
158
159
/*---------------------------------------------------------------------
160
 * CIRCLE - Specified by a center point and radius.
161
 *-------------------------------------------------------------------*/
162
typedef struct
163
{
164
  Point   center;
165
  float8    radius;
166
} CIRCLE;
167
168
/*
169
 * fmgr interface functions
170
 *
171
 * Path and Polygon are toastable varlena types, the others are just
172
 * fixed-size pass-by-reference types.
173
 */
174
175
static inline Point *
176
DatumGetPointP(Datum X)
177
0
{
178
0
  return (Point *) DatumGetPointer(X);
179
0
}
Unexecuted instantiation: reloptions.c:DatumGetPointP
Unexecuted instantiation: gistproc.c:DatumGetPointP
Unexecuted instantiation: spgdoinsert.c:DatumGetPointP
Unexecuted instantiation: spginsert.c:DatumGetPointP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetPointP
Unexecuted instantiation: spgproc.c:DatumGetPointP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetPointP
Unexecuted instantiation: spgscan.c:DatumGetPointP
Unexecuted instantiation: spgutils.c:DatumGetPointP
Unexecuted instantiation: spgvacuum.c:DatumGetPointP
Unexecuted instantiation: spgxlog.c:DatumGetPointP
Unexecuted instantiation: geo_ops.c:DatumGetPointP
Unexecuted instantiation: geo_spgist.c:DatumGetPointP
180
static inline Datum
181
PointPGetDatum(const Point *X)
182
0
{
183
0
  return PointerGetDatum(X);
184
0
}
Unexecuted instantiation: reloptions.c:PointPGetDatum
Unexecuted instantiation: gistproc.c:PointPGetDatum
Unexecuted instantiation: spgdoinsert.c:PointPGetDatum
Unexecuted instantiation: spginsert.c:PointPGetDatum
Unexecuted instantiation: spgkdtreeproc.c:PointPGetDatum
Unexecuted instantiation: spgproc.c:PointPGetDatum
Unexecuted instantiation: spgquadtreeproc.c:PointPGetDatum
Unexecuted instantiation: spgscan.c:PointPGetDatum
Unexecuted instantiation: spgutils.c:PointPGetDatum
Unexecuted instantiation: spgvacuum.c:PointPGetDatum
Unexecuted instantiation: spgxlog.c:PointPGetDatum
Unexecuted instantiation: geo_ops.c:PointPGetDatum
Unexecuted instantiation: geo_spgist.c:PointPGetDatum
185
0
#define PG_GETARG_POINT_P(n) DatumGetPointP(PG_GETARG_DATUM(n))
186
0
#define PG_RETURN_POINT_P(x) return PointPGetDatum(x)
187
188
static inline LSEG *
189
DatumGetLsegP(Datum X)
190
0
{
191
0
  return (LSEG *) DatumGetPointer(X);
192
0
}
Unexecuted instantiation: reloptions.c:DatumGetLsegP
Unexecuted instantiation: gistproc.c:DatumGetLsegP
Unexecuted instantiation: spgdoinsert.c:DatumGetLsegP
Unexecuted instantiation: spginsert.c:DatumGetLsegP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetLsegP
Unexecuted instantiation: spgproc.c:DatumGetLsegP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetLsegP
Unexecuted instantiation: spgscan.c:DatumGetLsegP
Unexecuted instantiation: spgutils.c:DatumGetLsegP
Unexecuted instantiation: spgvacuum.c:DatumGetLsegP
Unexecuted instantiation: spgxlog.c:DatumGetLsegP
Unexecuted instantiation: geo_ops.c:DatumGetLsegP
Unexecuted instantiation: geo_spgist.c:DatumGetLsegP
193
static inline Datum
194
LsegPGetDatum(const LSEG *X)
195
0
{
196
0
  return PointerGetDatum(X);
197
0
}
Unexecuted instantiation: reloptions.c:LsegPGetDatum
Unexecuted instantiation: gistproc.c:LsegPGetDatum
Unexecuted instantiation: spgdoinsert.c:LsegPGetDatum
Unexecuted instantiation: spginsert.c:LsegPGetDatum
Unexecuted instantiation: spgkdtreeproc.c:LsegPGetDatum
Unexecuted instantiation: spgproc.c:LsegPGetDatum
Unexecuted instantiation: spgquadtreeproc.c:LsegPGetDatum
Unexecuted instantiation: spgscan.c:LsegPGetDatum
Unexecuted instantiation: spgutils.c:LsegPGetDatum
Unexecuted instantiation: spgvacuum.c:LsegPGetDatum
Unexecuted instantiation: spgxlog.c:LsegPGetDatum
Unexecuted instantiation: geo_ops.c:LsegPGetDatum
Unexecuted instantiation: geo_spgist.c:LsegPGetDatum
198
0
#define PG_GETARG_LSEG_P(n) DatumGetLsegP(PG_GETARG_DATUM(n))
199
0
#define PG_RETURN_LSEG_P(x) return LsegPGetDatum(x)
200
201
static inline PATH *
202
DatumGetPathP(Datum X)
203
0
{
204
0
  return (PATH *) PG_DETOAST_DATUM(X);
205
0
}
Unexecuted instantiation: reloptions.c:DatumGetPathP
Unexecuted instantiation: gistproc.c:DatumGetPathP
Unexecuted instantiation: spgdoinsert.c:DatumGetPathP
Unexecuted instantiation: spginsert.c:DatumGetPathP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetPathP
Unexecuted instantiation: spgproc.c:DatumGetPathP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetPathP
Unexecuted instantiation: spgscan.c:DatumGetPathP
Unexecuted instantiation: spgutils.c:DatumGetPathP
Unexecuted instantiation: spgvacuum.c:DatumGetPathP
Unexecuted instantiation: spgxlog.c:DatumGetPathP
Unexecuted instantiation: geo_ops.c:DatumGetPathP
Unexecuted instantiation: geo_spgist.c:DatumGetPathP
206
static inline PATH *
207
DatumGetPathPCopy(Datum X)
208
0
{
209
0
  return (PATH *) PG_DETOAST_DATUM_COPY(X);
210
0
}
Unexecuted instantiation: reloptions.c:DatumGetPathPCopy
Unexecuted instantiation: gistproc.c:DatumGetPathPCopy
Unexecuted instantiation: spgdoinsert.c:DatumGetPathPCopy
Unexecuted instantiation: spginsert.c:DatumGetPathPCopy
Unexecuted instantiation: spgkdtreeproc.c:DatumGetPathPCopy
Unexecuted instantiation: spgproc.c:DatumGetPathPCopy
Unexecuted instantiation: spgquadtreeproc.c:DatumGetPathPCopy
Unexecuted instantiation: spgscan.c:DatumGetPathPCopy
Unexecuted instantiation: spgutils.c:DatumGetPathPCopy
Unexecuted instantiation: spgvacuum.c:DatumGetPathPCopy
Unexecuted instantiation: spgxlog.c:DatumGetPathPCopy
Unexecuted instantiation: geo_ops.c:DatumGetPathPCopy
Unexecuted instantiation: geo_spgist.c:DatumGetPathPCopy
211
static inline Datum
212
PathPGetDatum(const PATH *X)
213
0
{
214
0
  return PointerGetDatum(X);
215
0
}
Unexecuted instantiation: reloptions.c:PathPGetDatum
Unexecuted instantiation: gistproc.c:PathPGetDatum
Unexecuted instantiation: spgdoinsert.c:PathPGetDatum
Unexecuted instantiation: spginsert.c:PathPGetDatum
Unexecuted instantiation: spgkdtreeproc.c:PathPGetDatum
Unexecuted instantiation: spgproc.c:PathPGetDatum
Unexecuted instantiation: spgquadtreeproc.c:PathPGetDatum
Unexecuted instantiation: spgscan.c:PathPGetDatum
Unexecuted instantiation: spgutils.c:PathPGetDatum
Unexecuted instantiation: spgvacuum.c:PathPGetDatum
Unexecuted instantiation: spgxlog.c:PathPGetDatum
Unexecuted instantiation: geo_ops.c:PathPGetDatum
Unexecuted instantiation: geo_spgist.c:PathPGetDatum
216
0
#define PG_GETARG_PATH_P(n)    DatumGetPathP(PG_GETARG_DATUM(n))
217
0
#define PG_GETARG_PATH_P_COPY(n) DatumGetPathPCopy(PG_GETARG_DATUM(n))
218
0
#define PG_RETURN_PATH_P(x)    return PathPGetDatum(x)
219
220
static inline LINE *
221
DatumGetLineP(Datum X)
222
0
{
223
0
  return (LINE *) DatumGetPointer(X);
224
0
}
Unexecuted instantiation: reloptions.c:DatumGetLineP
Unexecuted instantiation: gistproc.c:DatumGetLineP
Unexecuted instantiation: spgdoinsert.c:DatumGetLineP
Unexecuted instantiation: spginsert.c:DatumGetLineP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetLineP
Unexecuted instantiation: spgproc.c:DatumGetLineP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetLineP
Unexecuted instantiation: spgscan.c:DatumGetLineP
Unexecuted instantiation: spgutils.c:DatumGetLineP
Unexecuted instantiation: spgvacuum.c:DatumGetLineP
Unexecuted instantiation: spgxlog.c:DatumGetLineP
Unexecuted instantiation: geo_ops.c:DatumGetLineP
Unexecuted instantiation: geo_spgist.c:DatumGetLineP
225
static inline Datum
226
LinePGetDatum(const LINE *X)
227
0
{
228
0
  return PointerGetDatum(X);
229
0
}
Unexecuted instantiation: reloptions.c:LinePGetDatum
Unexecuted instantiation: gistproc.c:LinePGetDatum
Unexecuted instantiation: spgdoinsert.c:LinePGetDatum
Unexecuted instantiation: spginsert.c:LinePGetDatum
Unexecuted instantiation: spgkdtreeproc.c:LinePGetDatum
Unexecuted instantiation: spgproc.c:LinePGetDatum
Unexecuted instantiation: spgquadtreeproc.c:LinePGetDatum
Unexecuted instantiation: spgscan.c:LinePGetDatum
Unexecuted instantiation: spgutils.c:LinePGetDatum
Unexecuted instantiation: spgvacuum.c:LinePGetDatum
Unexecuted instantiation: spgxlog.c:LinePGetDatum
Unexecuted instantiation: geo_ops.c:LinePGetDatum
Unexecuted instantiation: geo_spgist.c:LinePGetDatum
230
0
#define PG_GETARG_LINE_P(n) DatumGetLineP(PG_GETARG_DATUM(n))
231
0
#define PG_RETURN_LINE_P(x) return LinePGetDatum(x)
232
233
static inline BOX *
234
DatumGetBoxP(Datum X)
235
0
{
236
0
  return (BOX *) DatumGetPointer(X);
237
0
}
Unexecuted instantiation: reloptions.c:DatumGetBoxP
Unexecuted instantiation: gistproc.c:DatumGetBoxP
Unexecuted instantiation: spgdoinsert.c:DatumGetBoxP
Unexecuted instantiation: spginsert.c:DatumGetBoxP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetBoxP
Unexecuted instantiation: spgproc.c:DatumGetBoxP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetBoxP
Unexecuted instantiation: spgscan.c:DatumGetBoxP
Unexecuted instantiation: spgutils.c:DatumGetBoxP
Unexecuted instantiation: spgvacuum.c:DatumGetBoxP
Unexecuted instantiation: spgxlog.c:DatumGetBoxP
Unexecuted instantiation: geo_ops.c:DatumGetBoxP
Unexecuted instantiation: geo_spgist.c:DatumGetBoxP
238
static inline Datum
239
BoxPGetDatum(const BOX *X)
240
0
{
241
0
  return PointerGetDatum(X);
242
0
}
Unexecuted instantiation: reloptions.c:BoxPGetDatum
Unexecuted instantiation: gistproc.c:BoxPGetDatum
Unexecuted instantiation: spgdoinsert.c:BoxPGetDatum
Unexecuted instantiation: spginsert.c:BoxPGetDatum
Unexecuted instantiation: spgkdtreeproc.c:BoxPGetDatum
Unexecuted instantiation: spgproc.c:BoxPGetDatum
Unexecuted instantiation: spgquadtreeproc.c:BoxPGetDatum
Unexecuted instantiation: spgscan.c:BoxPGetDatum
Unexecuted instantiation: spgutils.c:BoxPGetDatum
Unexecuted instantiation: spgvacuum.c:BoxPGetDatum
Unexecuted instantiation: spgxlog.c:BoxPGetDatum
Unexecuted instantiation: geo_ops.c:BoxPGetDatum
Unexecuted instantiation: geo_spgist.c:BoxPGetDatum
243
0
#define PG_GETARG_BOX_P(n) DatumGetBoxP(PG_GETARG_DATUM(n))
244
0
#define PG_RETURN_BOX_P(x) return BoxPGetDatum(x)
245
246
static inline POLYGON *
247
DatumGetPolygonP(Datum X)
248
0
{
249
0
  return (POLYGON *) PG_DETOAST_DATUM(X);
250
0
}
Unexecuted instantiation: reloptions.c:DatumGetPolygonP
Unexecuted instantiation: gistproc.c:DatumGetPolygonP
Unexecuted instantiation: spgdoinsert.c:DatumGetPolygonP
Unexecuted instantiation: spginsert.c:DatumGetPolygonP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetPolygonP
Unexecuted instantiation: spgproc.c:DatumGetPolygonP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetPolygonP
Unexecuted instantiation: spgscan.c:DatumGetPolygonP
Unexecuted instantiation: spgutils.c:DatumGetPolygonP
Unexecuted instantiation: spgvacuum.c:DatumGetPolygonP
Unexecuted instantiation: spgxlog.c:DatumGetPolygonP
Unexecuted instantiation: geo_ops.c:DatumGetPolygonP
Unexecuted instantiation: geo_spgist.c:DatumGetPolygonP
251
static inline POLYGON *
252
DatumGetPolygonPCopy(Datum X)
253
0
{
254
0
  return (POLYGON *) PG_DETOAST_DATUM_COPY(X);
255
0
}
Unexecuted instantiation: reloptions.c:DatumGetPolygonPCopy
Unexecuted instantiation: gistproc.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgdoinsert.c:DatumGetPolygonPCopy
Unexecuted instantiation: spginsert.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgkdtreeproc.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgproc.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgquadtreeproc.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgscan.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgutils.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgvacuum.c:DatumGetPolygonPCopy
Unexecuted instantiation: spgxlog.c:DatumGetPolygonPCopy
Unexecuted instantiation: geo_ops.c:DatumGetPolygonPCopy
Unexecuted instantiation: geo_spgist.c:DatumGetPolygonPCopy
256
static inline Datum
257
PolygonPGetDatum(const POLYGON *X)
258
0
{
259
0
  return PointerGetDatum(X);
260
0
}
Unexecuted instantiation: reloptions.c:PolygonPGetDatum
Unexecuted instantiation: gistproc.c:PolygonPGetDatum
Unexecuted instantiation: spgdoinsert.c:PolygonPGetDatum
Unexecuted instantiation: spginsert.c:PolygonPGetDatum
Unexecuted instantiation: spgkdtreeproc.c:PolygonPGetDatum
Unexecuted instantiation: spgproc.c:PolygonPGetDatum
Unexecuted instantiation: spgquadtreeproc.c:PolygonPGetDatum
Unexecuted instantiation: spgscan.c:PolygonPGetDatum
Unexecuted instantiation: spgutils.c:PolygonPGetDatum
Unexecuted instantiation: spgvacuum.c:PolygonPGetDatum
Unexecuted instantiation: spgxlog.c:PolygonPGetDatum
Unexecuted instantiation: geo_ops.c:PolygonPGetDatum
Unexecuted instantiation: geo_spgist.c:PolygonPGetDatum
261
0
#define PG_GETARG_POLYGON_P(n)    DatumGetPolygonP(PG_GETARG_DATUM(n))
262
#define PG_GETARG_POLYGON_P_COPY(n) DatumGetPolygonPCopy(PG_GETARG_DATUM(n))
263
0
#define PG_RETURN_POLYGON_P(x)    return PolygonPGetDatum(x)
264
265
static inline CIRCLE *
266
DatumGetCircleP(Datum X)
267
0
{
268
0
  return (CIRCLE *) DatumGetPointer(X);
269
0
}
Unexecuted instantiation: reloptions.c:DatumGetCircleP
Unexecuted instantiation: gistproc.c:DatumGetCircleP
Unexecuted instantiation: spgdoinsert.c:DatumGetCircleP
Unexecuted instantiation: spginsert.c:DatumGetCircleP
Unexecuted instantiation: spgkdtreeproc.c:DatumGetCircleP
Unexecuted instantiation: spgproc.c:DatumGetCircleP
Unexecuted instantiation: spgquadtreeproc.c:DatumGetCircleP
Unexecuted instantiation: spgscan.c:DatumGetCircleP
Unexecuted instantiation: spgutils.c:DatumGetCircleP
Unexecuted instantiation: spgvacuum.c:DatumGetCircleP
Unexecuted instantiation: spgxlog.c:DatumGetCircleP
Unexecuted instantiation: geo_ops.c:DatumGetCircleP
Unexecuted instantiation: geo_spgist.c:DatumGetCircleP
270
static inline Datum
271
CirclePGetDatum(const CIRCLE *X)
272
0
{
273
0
  return PointerGetDatum(X);
274
0
}
Unexecuted instantiation: reloptions.c:CirclePGetDatum
Unexecuted instantiation: gistproc.c:CirclePGetDatum
Unexecuted instantiation: spgdoinsert.c:CirclePGetDatum
Unexecuted instantiation: spginsert.c:CirclePGetDatum
Unexecuted instantiation: spgkdtreeproc.c:CirclePGetDatum
Unexecuted instantiation: spgproc.c:CirclePGetDatum
Unexecuted instantiation: spgquadtreeproc.c:CirclePGetDatum
Unexecuted instantiation: spgscan.c:CirclePGetDatum
Unexecuted instantiation: spgutils.c:CirclePGetDatum
Unexecuted instantiation: spgvacuum.c:CirclePGetDatum
Unexecuted instantiation: spgxlog.c:CirclePGetDatum
Unexecuted instantiation: geo_ops.c:CirclePGetDatum
Unexecuted instantiation: geo_spgist.c:CirclePGetDatum
275
0
#define PG_GETARG_CIRCLE_P(n) DatumGetCircleP(PG_GETARG_DATUM(n))
276
0
#define PG_RETURN_CIRCLE_P(x) return CirclePGetDatum(x)
277
278
279
/*
280
 * in geo_ops.c
281
 */
282
283
extern float8 pg_hypot(float8 x, float8 y);
284
285
#endif              /* GEO_DECLS_H */