/src/postgis/liblwgeom/lwinline.h
Line | Count | Source |
1 | | /********************************************************************** |
2 | | * |
3 | | * PostGIS - Spatial Types for PostgreSQL |
4 | | * http://postgis.net |
5 | | * |
6 | | * PostGIS is free software: you can redistribute it and/or modify |
7 | | * it under the terms of the GNU General Public License as published by |
8 | | * the Free Software Foundation, either version 2 of the License, or |
9 | | * (at your option) any later version. |
10 | | * |
11 | | * PostGIS is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | | * GNU General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU General Public License |
17 | | * along with PostGIS. If not, see <http://www.gnu.org/licenses/>. |
18 | | * |
19 | | ********************************************************************** |
20 | | * |
21 | | * Copyright 2018 Darafei Praliaskouski <me@komzpa.net> |
22 | | * Copyright 2017-2018 Daniel Baston <dbaston@gmail.com> |
23 | | * Copyright 2011 Sandro Santilli <strk@kbt.io> |
24 | | * Copyright 2011 Paul Ramsey <pramsey@cleverelephant.ca> |
25 | | * Copyright 2007-2008 Mark Cave-Ayland |
26 | | * Copyright 2001-2006 Refractions Research Inc. |
27 | | * |
28 | | **********************************************************************/ |
29 | | |
30 | | #include <assert.h> |
31 | | |
32 | | inline static double |
33 | | distance2d_sqr_pt_pt(const POINT2D *p1, const POINT2D *p2) |
34 | 0 | { |
35 | 0 | double hside = p2->x - p1->x; |
36 | 0 | double vside = p2->y - p1->y; |
37 | |
|
38 | 0 | return hside * hside + vside * vside; |
39 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:distance2d_sqr_pt_pt(POINT2D const*, POINT2D const*) Unexecuted instantiation: lwgeom.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwpoint.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwline.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwpoly.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwtriangle.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwmpoint.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwmline.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwmpoly.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwcollection.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwcircstring.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwcompound.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwcurvepoly.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwpsurface.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwtin.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwiterator.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwout_wkt.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwin_wkt.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwutil.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwhomogenize.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwalgorithm.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwstroke.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwprint.c:distance2d_sqr_pt_pt Unexecuted instantiation: gbox.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwgeodetic.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwgeom_geos.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwgeom_geos_node.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwgeom_geos_split.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwspheroid.c:distance2d_sqr_pt_pt Unexecuted instantiation: stringbuffer.c:distance2d_sqr_pt_pt Unexecuted instantiation: measures.c:distance2d_sqr_pt_pt Unexecuted instantiation: measures3d.c:distance2d_sqr_pt_pt Unexecuted instantiation: ptarray.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwgeom_api.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwin_wkt_parse.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwin_wkt_lex.c:distance2d_sqr_pt_pt Unexecuted instantiation: lwlinearreferencing.c:distance2d_sqr_pt_pt Unexecuted instantiation: geojson_import_fuzzer.cpp:distance2d_sqr_pt_pt(POINT2D const*, POINT2D const*) Unexecuted instantiation: lwin_geojson.c:distance2d_sqr_pt_pt Unexecuted instantiation: wkb_import_fuzzer.cpp:distance2d_sqr_pt_pt(POINT2D const*, POINT2D const*) Unexecuted instantiation: lwin_wkb.c:distance2d_sqr_pt_pt |
40 | | |
41 | | inline static double |
42 | | distance3d_sqr_pt_pt(const POINT3D *p1, const POINT3D *p2) |
43 | 0 | { |
44 | 0 | double hside = p2->x - p1->x; |
45 | 0 | double vside = p2->y - p1->y; |
46 | 0 | double zside = p2->z - p1->z; |
47 | 0 |
|
48 | 0 | return hside * hside + vside * vside + zside * zside; |
49 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:distance3d_sqr_pt_pt(POINT3D const*, POINT3D const*) Unexecuted instantiation: lwgeom.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwpoint.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwline.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwpoly.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwtriangle.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwmpoint.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwmline.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwmpoly.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwcollection.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwcircstring.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwcompound.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwcurvepoly.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwpsurface.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwtin.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwiterator.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwout_wkt.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwin_wkt.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwutil.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwhomogenize.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwalgorithm.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwstroke.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwprint.c:distance3d_sqr_pt_pt Unexecuted instantiation: gbox.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwgeodetic.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwgeom_geos.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwgeom_geos_node.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwgeom_geos_split.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwspheroid.c:distance3d_sqr_pt_pt Unexecuted instantiation: stringbuffer.c:distance3d_sqr_pt_pt Unexecuted instantiation: measures.c:distance3d_sqr_pt_pt Unexecuted instantiation: measures3d.c:distance3d_sqr_pt_pt Unexecuted instantiation: ptarray.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwgeom_api.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwin_wkt_parse.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwin_wkt_lex.c:distance3d_sqr_pt_pt Unexecuted instantiation: lwlinearreferencing.c:distance3d_sqr_pt_pt Unexecuted instantiation: geojson_import_fuzzer.cpp:distance3d_sqr_pt_pt(POINT3D const*, POINT3D const*) Unexecuted instantiation: lwin_geojson.c:distance3d_sqr_pt_pt Unexecuted instantiation: wkb_import_fuzzer.cpp:distance3d_sqr_pt_pt(POINT3D const*, POINT3D const*) Unexecuted instantiation: lwin_wkb.c:distance3d_sqr_pt_pt |
50 | | |
51 | | /* |
52 | | * Size of point represeneted in the POINTARRAY |
53 | | * 16 for 2d, 24 for 3d, 32 for 4d |
54 | | */ |
55 | | static inline size_t |
56 | | ptarray_point_size(const POINTARRAY *pa) |
57 | 2.90M | { |
58 | 2.90M | return sizeof(double) * FLAGS_NDIMS(pa->flags); |
59 | 2.90M | } Unexecuted instantiation: wkt_import_fuzzer.cpp:ptarray_point_size(POINTARRAY const*) Unexecuted instantiation: lwgeom.c:ptarray_point_size Unexecuted instantiation: lwpoint.c:ptarray_point_size Unexecuted instantiation: lwline.c:ptarray_point_size Unexecuted instantiation: lwpoly.c:ptarray_point_size Unexecuted instantiation: lwtriangle.c:ptarray_point_size Unexecuted instantiation: lwmpoint.c:ptarray_point_size Unexecuted instantiation: lwmline.c:ptarray_point_size Unexecuted instantiation: lwmpoly.c:ptarray_point_size Unexecuted instantiation: lwcollection.c:ptarray_point_size Unexecuted instantiation: lwcircstring.c:ptarray_point_size Unexecuted instantiation: lwcompound.c:ptarray_point_size Unexecuted instantiation: lwcurvepoly.c:ptarray_point_size Unexecuted instantiation: lwpsurface.c:ptarray_point_size Unexecuted instantiation: lwtin.c:ptarray_point_size Unexecuted instantiation: lwiterator.c:ptarray_point_size Unexecuted instantiation: lwout_wkt.c:ptarray_point_size Unexecuted instantiation: lwin_wkt.c:ptarray_point_size Unexecuted instantiation: lwutil.c:ptarray_point_size Unexecuted instantiation: lwhomogenize.c:ptarray_point_size Unexecuted instantiation: lwalgorithm.c:ptarray_point_size Unexecuted instantiation: lwstroke.c:ptarray_point_size Unexecuted instantiation: lwprint.c:ptarray_point_size gbox.c:ptarray_point_size Line | Count | Source | 57 | 142k | { | 58 | 142k | return sizeof(double) * FLAGS_NDIMS(pa->flags); | 59 | 142k | } |
Unexecuted instantiation: lwgeodetic.c:ptarray_point_size Unexecuted instantiation: lwgeom_geos.c:ptarray_point_size Unexecuted instantiation: lwgeom_geos_node.c:ptarray_point_size Unexecuted instantiation: lwgeom_geos_split.c:ptarray_point_size Unexecuted instantiation: lwspheroid.c:ptarray_point_size Unexecuted instantiation: stringbuffer.c:ptarray_point_size Unexecuted instantiation: measures.c:ptarray_point_size Unexecuted instantiation: measures3d.c:ptarray_point_size ptarray.c:ptarray_point_size Line | Count | Source | 57 | 1.76M | { | 58 | 1.76M | return sizeof(double) * FLAGS_NDIMS(pa->flags); | 59 | 1.76M | } |
lwgeom_api.c:ptarray_point_size Line | Count | Source | 57 | 993k | { | 58 | 993k | return sizeof(double) * FLAGS_NDIMS(pa->flags); | 59 | 993k | } |
Unexecuted instantiation: lwin_wkt_parse.c:ptarray_point_size Unexecuted instantiation: lwin_wkt_lex.c:ptarray_point_size Unexecuted instantiation: lwlinearreferencing.c:ptarray_point_size Unexecuted instantiation: geojson_import_fuzzer.cpp:ptarray_point_size(POINTARRAY const*) Unexecuted instantiation: lwin_geojson.c:ptarray_point_size Unexecuted instantiation: wkb_import_fuzzer.cpp:ptarray_point_size(POINTARRAY const*) lwin_wkb.c:ptarray_point_size Line | Count | Source | 57 | 10.7k | { | 58 | 10.7k | return sizeof(double) * FLAGS_NDIMS(pa->flags); | 59 | 10.7k | } |
|
60 | | |
61 | | /* |
62 | | * Get a pointer to Nth point of a POINTARRAY |
63 | | * You'll need to cast it to appropriate dimensioned point. |
64 | | * Note that if you cast to a higher dimensional point you'll |
65 | | * possibly corrupt the POINTARRAY. |
66 | | * |
67 | | * Casting to returned pointer to POINT2D* should be safe, |
68 | | * as gserialized format always keeps the POINTARRAY pointer |
69 | | * aligned to double boundary. |
70 | | * |
71 | | * WARNING: Don't cast this to a POINT! |
72 | | * it would not be reliable due to memory alignment constraints |
73 | | */ |
74 | | static inline uint8_t * |
75 | | getPoint_internal(const POINTARRAY *pa, uint32_t n) |
76 | 1.15M | { |
77 | 1.15M | size_t size; |
78 | 1.15M | uint8_t *ptr; |
79 | | |
80 | 1.15M | assert(pa); |
81 | 1.15M | assert(n <= pa->npoints); |
82 | 1.15M | assert(n <= pa->maxpoints); |
83 | | |
84 | 1.15M | size = ptarray_point_size(pa); |
85 | 1.15M | ptr = pa->serialized_pointlist + size * n; |
86 | | |
87 | 1.15M | return ptr; |
88 | 1.15M | } Unexecuted instantiation: wkt_import_fuzzer.cpp:getPoint_internal(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwgeom.c:getPoint_internal Unexecuted instantiation: lwpoint.c:getPoint_internal Unexecuted instantiation: lwline.c:getPoint_internal Unexecuted instantiation: lwpoly.c:getPoint_internal Unexecuted instantiation: lwtriangle.c:getPoint_internal Unexecuted instantiation: lwmpoint.c:getPoint_internal Unexecuted instantiation: lwmline.c:getPoint_internal Unexecuted instantiation: lwmpoly.c:getPoint_internal Unexecuted instantiation: lwcollection.c:getPoint_internal Unexecuted instantiation: lwcircstring.c:getPoint_internal Unexecuted instantiation: lwcompound.c:getPoint_internal Unexecuted instantiation: lwcurvepoly.c:getPoint_internal Unexecuted instantiation: lwpsurface.c:getPoint_internal Unexecuted instantiation: lwtin.c:getPoint_internal Unexecuted instantiation: lwiterator.c:getPoint_internal Unexecuted instantiation: lwout_wkt.c:getPoint_internal Unexecuted instantiation: lwin_wkt.c:getPoint_internal Unexecuted instantiation: lwutil.c:getPoint_internal Unexecuted instantiation: lwhomogenize.c:getPoint_internal Unexecuted instantiation: lwalgorithm.c:getPoint_internal Unexecuted instantiation: lwstroke.c:getPoint_internal Unexecuted instantiation: lwprint.c:getPoint_internal Line | Count | Source | 76 | 142k | { | 77 | 142k | size_t size; | 78 | 142k | uint8_t *ptr; | 79 | | | 80 | 142k | assert(pa); | 81 | 142k | assert(n <= pa->npoints); | 82 | 142k | assert(n <= pa->maxpoints); | 83 | | | 84 | 142k | size = ptarray_point_size(pa); | 85 | 142k | ptr = pa->serialized_pointlist + size * n; | 86 | | | 87 | 142k | return ptr; | 88 | 142k | } |
Unexecuted instantiation: lwgeodetic.c:getPoint_internal Unexecuted instantiation: lwgeom_geos.c:getPoint_internal Unexecuted instantiation: lwgeom_geos_node.c:getPoint_internal Unexecuted instantiation: lwgeom_geos_split.c:getPoint_internal Unexecuted instantiation: lwspheroid.c:getPoint_internal Unexecuted instantiation: stringbuffer.c:getPoint_internal Unexecuted instantiation: measures.c:getPoint_internal Unexecuted instantiation: measures3d.c:getPoint_internal ptarray.c:getPoint_internal Line | Count | Source | 76 | 5.98k | { | 77 | 5.98k | size_t size; | 78 | 5.98k | uint8_t *ptr; | 79 | | | 80 | 5.98k | assert(pa); | 81 | 5.98k | assert(n <= pa->npoints); | 82 | 5.98k | assert(n <= pa->maxpoints); | 83 | | | 84 | 5.98k | size = ptarray_point_size(pa); | 85 | 5.98k | ptr = pa->serialized_pointlist + size * n; | 86 | | | 87 | 5.98k | return ptr; | 88 | 5.98k | } |
lwgeom_api.c:getPoint_internal Line | Count | Source | 76 | 993k | { | 77 | 993k | size_t size; | 78 | 993k | uint8_t *ptr; | 79 | | | 80 | 993k | assert(pa); | 81 | 993k | assert(n <= pa->npoints); | 82 | 993k | assert(n <= pa->maxpoints); | 83 | | | 84 | 993k | size = ptarray_point_size(pa); | 85 | 993k | ptr = pa->serialized_pointlist + size * n; | 86 | | | 87 | 993k | return ptr; | 88 | 993k | } |
Unexecuted instantiation: lwin_wkt_parse.c:getPoint_internal Unexecuted instantiation: lwin_wkt_lex.c:getPoint_internal Unexecuted instantiation: lwlinearreferencing.c:getPoint_internal Unexecuted instantiation: geojson_import_fuzzer.cpp:getPoint_internal(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwin_geojson.c:getPoint_internal Unexecuted instantiation: wkb_import_fuzzer.cpp:getPoint_internal(POINTARRAY const*, unsigned int) lwin_wkb.c:getPoint_internal Line | Count | Source | 76 | 10.7k | { | 77 | 10.7k | size_t size; | 78 | 10.7k | uint8_t *ptr; | 79 | | | 80 | 10.7k | assert(pa); | 81 | 10.7k | assert(n <= pa->npoints); | 82 | 10.7k | assert(n <= pa->maxpoints); | 83 | | | 84 | 10.7k | size = ptarray_point_size(pa); | 85 | 10.7k | ptr = pa->serialized_pointlist + size * n; | 86 | | | 87 | 10.7k | return ptr; | 88 | 10.7k | } |
|
89 | | |
90 | | /** |
91 | | * Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, |
92 | | * suitable for reading from. This is very high performance |
93 | | * and declared const because you aren't allowed to muck with the |
94 | | * values, only read them. |
95 | | */ |
96 | | static inline const POINT2D * |
97 | | getPoint2d_cp(const POINTARRAY *pa, uint32_t n) |
98 | 123k | { |
99 | 123k | return (const POINT2D *)getPoint_internal(pa, n); |
100 | 123k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:getPoint2d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwgeom.c:getPoint2d_cp Unexecuted instantiation: lwpoint.c:getPoint2d_cp Unexecuted instantiation: lwline.c:getPoint2d_cp Unexecuted instantiation: lwpoly.c:getPoint2d_cp Unexecuted instantiation: lwtriangle.c:getPoint2d_cp Unexecuted instantiation: lwmpoint.c:getPoint2d_cp Unexecuted instantiation: lwmline.c:getPoint2d_cp Unexecuted instantiation: lwmpoly.c:getPoint2d_cp Unexecuted instantiation: lwcollection.c:getPoint2d_cp Unexecuted instantiation: lwcircstring.c:getPoint2d_cp Unexecuted instantiation: lwcompound.c:getPoint2d_cp Unexecuted instantiation: lwcurvepoly.c:getPoint2d_cp Unexecuted instantiation: lwpsurface.c:getPoint2d_cp Unexecuted instantiation: lwtin.c:getPoint2d_cp Unexecuted instantiation: lwiterator.c:getPoint2d_cp Unexecuted instantiation: lwout_wkt.c:getPoint2d_cp Unexecuted instantiation: lwin_wkt.c:getPoint2d_cp Unexecuted instantiation: lwutil.c:getPoint2d_cp Unexecuted instantiation: lwhomogenize.c:getPoint2d_cp Unexecuted instantiation: lwalgorithm.c:getPoint2d_cp Unexecuted instantiation: lwstroke.c:getPoint2d_cp Unexecuted instantiation: lwprint.c:getPoint2d_cp Line | Count | Source | 98 | 112k | { | 99 | 112k | return (const POINT2D *)getPoint_internal(pa, n); | 100 | 112k | } |
Unexecuted instantiation: lwgeodetic.c:getPoint2d_cp Unexecuted instantiation: lwgeom_geos.c:getPoint2d_cp Unexecuted instantiation: lwgeom_geos_node.c:getPoint2d_cp Unexecuted instantiation: lwgeom_geos_split.c:getPoint2d_cp Unexecuted instantiation: lwspheroid.c:getPoint2d_cp Unexecuted instantiation: stringbuffer.c:getPoint2d_cp Unexecuted instantiation: measures.c:getPoint2d_cp Unexecuted instantiation: measures3d.c:getPoint2d_cp Unexecuted instantiation: ptarray.c:getPoint2d_cp Unexecuted instantiation: lwgeom_api.c:getPoint2d_cp Unexecuted instantiation: lwin_wkt_parse.c:getPoint2d_cp Unexecuted instantiation: lwin_wkt_lex.c:getPoint2d_cp Unexecuted instantiation: lwlinearreferencing.c:getPoint2d_cp Unexecuted instantiation: geojson_import_fuzzer.cpp:getPoint2d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwin_geojson.c:getPoint2d_cp Unexecuted instantiation: wkb_import_fuzzer.cpp:getPoint2d_cp(POINTARRAY const*, unsigned int) Line | Count | Source | 98 | 10.7k | { | 99 | 10.7k | return (const POINT2D *)getPoint_internal(pa, n); | 100 | 10.7k | } |
|
101 | | |
102 | | /** |
103 | | * Returns a POINT3D pointer into the POINTARRAY serialized_ptlist, |
104 | | * suitable for reading from. This is very high performance |
105 | | * and declared const because you aren't allowed to muck with the |
106 | | * values, only read them. |
107 | | */ |
108 | | static inline const POINT3D * |
109 | | getPoint3d_cp(const POINTARRAY *pa, uint32_t n) |
110 | 29.6k | { |
111 | 29.6k | return (const POINT3D *)getPoint_internal(pa, n); |
112 | 29.6k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:getPoint3d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwgeom.c:getPoint3d_cp Unexecuted instantiation: lwpoint.c:getPoint3d_cp Unexecuted instantiation: lwline.c:getPoint3d_cp Unexecuted instantiation: lwpoly.c:getPoint3d_cp Unexecuted instantiation: lwtriangle.c:getPoint3d_cp Unexecuted instantiation: lwmpoint.c:getPoint3d_cp Unexecuted instantiation: lwmline.c:getPoint3d_cp Unexecuted instantiation: lwmpoly.c:getPoint3d_cp Unexecuted instantiation: lwcollection.c:getPoint3d_cp Unexecuted instantiation: lwcircstring.c:getPoint3d_cp Unexecuted instantiation: lwcompound.c:getPoint3d_cp Unexecuted instantiation: lwcurvepoly.c:getPoint3d_cp Unexecuted instantiation: lwpsurface.c:getPoint3d_cp Unexecuted instantiation: lwtin.c:getPoint3d_cp Unexecuted instantiation: lwiterator.c:getPoint3d_cp Unexecuted instantiation: lwout_wkt.c:getPoint3d_cp Unexecuted instantiation: lwin_wkt.c:getPoint3d_cp Unexecuted instantiation: lwutil.c:getPoint3d_cp Unexecuted instantiation: lwhomogenize.c:getPoint3d_cp Unexecuted instantiation: lwalgorithm.c:getPoint3d_cp Unexecuted instantiation: lwstroke.c:getPoint3d_cp Unexecuted instantiation: lwprint.c:getPoint3d_cp Line | Count | Source | 110 | 29.6k | { | 111 | 29.6k | return (const POINT3D *)getPoint_internal(pa, n); | 112 | 29.6k | } |
Unexecuted instantiation: lwgeodetic.c:getPoint3d_cp Unexecuted instantiation: lwgeom_geos.c:getPoint3d_cp Unexecuted instantiation: lwgeom_geos_node.c:getPoint3d_cp Unexecuted instantiation: lwgeom_geos_split.c:getPoint3d_cp Unexecuted instantiation: lwspheroid.c:getPoint3d_cp Unexecuted instantiation: stringbuffer.c:getPoint3d_cp Unexecuted instantiation: measures.c:getPoint3d_cp Unexecuted instantiation: measures3d.c:getPoint3d_cp Unexecuted instantiation: ptarray.c:getPoint3d_cp Unexecuted instantiation: lwgeom_api.c:getPoint3d_cp Unexecuted instantiation: lwin_wkt_parse.c:getPoint3d_cp Unexecuted instantiation: lwin_wkt_lex.c:getPoint3d_cp Unexecuted instantiation: lwlinearreferencing.c:getPoint3d_cp Unexecuted instantiation: geojson_import_fuzzer.cpp:getPoint3d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwin_geojson.c:getPoint3d_cp Unexecuted instantiation: wkb_import_fuzzer.cpp:getPoint3d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwin_wkb.c:getPoint3d_cp |
113 | | |
114 | | /** |
115 | | * Returns a POINT4D pointer into the POINTARRAY serialized_ptlist, |
116 | | * suitable for reading from. This is very high performance |
117 | | * and declared const because you aren't allowed to muck with the |
118 | | * values, only read them. |
119 | | */ |
120 | | static inline const POINT4D * |
121 | | getPoint4d_cp(const POINTARRAY *pa, uint32_t n) |
122 | 0 | { |
123 | 0 | return (const POINT4D *)getPoint_internal(pa, n); |
124 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:getPoint4d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwgeom.c:getPoint4d_cp Unexecuted instantiation: lwpoint.c:getPoint4d_cp Unexecuted instantiation: lwline.c:getPoint4d_cp Unexecuted instantiation: lwpoly.c:getPoint4d_cp Unexecuted instantiation: lwtriangle.c:getPoint4d_cp Unexecuted instantiation: lwmpoint.c:getPoint4d_cp Unexecuted instantiation: lwmline.c:getPoint4d_cp Unexecuted instantiation: lwmpoly.c:getPoint4d_cp Unexecuted instantiation: lwcollection.c:getPoint4d_cp Unexecuted instantiation: lwcircstring.c:getPoint4d_cp Unexecuted instantiation: lwcompound.c:getPoint4d_cp Unexecuted instantiation: lwcurvepoly.c:getPoint4d_cp Unexecuted instantiation: lwpsurface.c:getPoint4d_cp Unexecuted instantiation: lwtin.c:getPoint4d_cp Unexecuted instantiation: lwiterator.c:getPoint4d_cp Unexecuted instantiation: lwout_wkt.c:getPoint4d_cp Unexecuted instantiation: lwin_wkt.c:getPoint4d_cp Unexecuted instantiation: lwutil.c:getPoint4d_cp Unexecuted instantiation: lwhomogenize.c:getPoint4d_cp Unexecuted instantiation: lwalgorithm.c:getPoint4d_cp Unexecuted instantiation: lwstroke.c:getPoint4d_cp Unexecuted instantiation: lwprint.c:getPoint4d_cp Unexecuted instantiation: gbox.c:getPoint4d_cp Unexecuted instantiation: lwgeodetic.c:getPoint4d_cp Unexecuted instantiation: lwgeom_geos.c:getPoint4d_cp Unexecuted instantiation: lwgeom_geos_node.c:getPoint4d_cp Unexecuted instantiation: lwgeom_geos_split.c:getPoint4d_cp Unexecuted instantiation: lwspheroid.c:getPoint4d_cp Unexecuted instantiation: stringbuffer.c:getPoint4d_cp Unexecuted instantiation: measures.c:getPoint4d_cp Unexecuted instantiation: measures3d.c:getPoint4d_cp Unexecuted instantiation: ptarray.c:getPoint4d_cp Unexecuted instantiation: lwgeom_api.c:getPoint4d_cp Unexecuted instantiation: lwin_wkt_parse.c:getPoint4d_cp Unexecuted instantiation: lwin_wkt_lex.c:getPoint4d_cp Unexecuted instantiation: lwlinearreferencing.c:getPoint4d_cp Unexecuted instantiation: geojson_import_fuzzer.cpp:getPoint4d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwin_geojson.c:getPoint4d_cp Unexecuted instantiation: wkb_import_fuzzer.cpp:getPoint4d_cp(POINTARRAY const*, unsigned int) Unexecuted instantiation: lwin_wkb.c:getPoint4d_cp |
125 | | |
126 | | static inline LWPOINT * |
127 | | lwgeom_as_lwpoint(const LWGEOM *lwgeom) |
128 | 0 | { |
129 | 0 | if (!lwgeom) |
130 | 0 | return NULL; |
131 | 0 | if (lwgeom->type == POINTTYPE) |
132 | 0 | return (LWPOINT *)lwgeom; |
133 | 0 | else |
134 | 0 | return NULL; |
135 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwgeom_as_lwpoint(LWGEOM const*) Unexecuted instantiation: lwgeom.c:lwgeom_as_lwpoint Unexecuted instantiation: lwpoint.c:lwgeom_as_lwpoint Unexecuted instantiation: lwline.c:lwgeom_as_lwpoint Unexecuted instantiation: lwpoly.c:lwgeom_as_lwpoint Unexecuted instantiation: lwtriangle.c:lwgeom_as_lwpoint Unexecuted instantiation: lwmpoint.c:lwgeom_as_lwpoint Unexecuted instantiation: lwmline.c:lwgeom_as_lwpoint Unexecuted instantiation: lwmpoly.c:lwgeom_as_lwpoint Unexecuted instantiation: lwcollection.c:lwgeom_as_lwpoint Unexecuted instantiation: lwcircstring.c:lwgeom_as_lwpoint Unexecuted instantiation: lwcompound.c:lwgeom_as_lwpoint Unexecuted instantiation: lwcurvepoly.c:lwgeom_as_lwpoint Unexecuted instantiation: lwpsurface.c:lwgeom_as_lwpoint Unexecuted instantiation: lwtin.c:lwgeom_as_lwpoint Unexecuted instantiation: lwiterator.c:lwgeom_as_lwpoint Unexecuted instantiation: lwout_wkt.c:lwgeom_as_lwpoint Unexecuted instantiation: lwin_wkt.c:lwgeom_as_lwpoint Unexecuted instantiation: lwutil.c:lwgeom_as_lwpoint Unexecuted instantiation: lwhomogenize.c:lwgeom_as_lwpoint Unexecuted instantiation: lwalgorithm.c:lwgeom_as_lwpoint Unexecuted instantiation: lwstroke.c:lwgeom_as_lwpoint Unexecuted instantiation: lwprint.c:lwgeom_as_lwpoint Unexecuted instantiation: gbox.c:lwgeom_as_lwpoint Unexecuted instantiation: lwgeodetic.c:lwgeom_as_lwpoint Unexecuted instantiation: lwgeom_geos.c:lwgeom_as_lwpoint Unexecuted instantiation: lwgeom_geos_node.c:lwgeom_as_lwpoint Unexecuted instantiation: lwgeom_geos_split.c:lwgeom_as_lwpoint Unexecuted instantiation: lwspheroid.c:lwgeom_as_lwpoint Unexecuted instantiation: stringbuffer.c:lwgeom_as_lwpoint Unexecuted instantiation: measures.c:lwgeom_as_lwpoint Unexecuted instantiation: measures3d.c:lwgeom_as_lwpoint Unexecuted instantiation: ptarray.c:lwgeom_as_lwpoint Unexecuted instantiation: lwgeom_api.c:lwgeom_as_lwpoint Unexecuted instantiation: lwin_wkt_parse.c:lwgeom_as_lwpoint Unexecuted instantiation: lwin_wkt_lex.c:lwgeom_as_lwpoint Unexecuted instantiation: lwlinearreferencing.c:lwgeom_as_lwpoint Unexecuted instantiation: geojson_import_fuzzer.cpp:lwgeom_as_lwpoint(LWGEOM const*) Unexecuted instantiation: lwin_geojson.c:lwgeom_as_lwpoint Unexecuted instantiation: wkb_import_fuzzer.cpp:lwgeom_as_lwpoint(LWGEOM const*) Unexecuted instantiation: lwin_wkb.c:lwgeom_as_lwpoint |
136 | | |
137 | | /** |
138 | | * Return LWTYPE number |
139 | | */ |
140 | | static inline uint32_t |
141 | | lwgeom_get_type(const LWGEOM *geom) |
142 | 0 | { |
143 | 0 | if (!geom) |
144 | 0 | return 0; |
145 | 0 | return geom->type; |
146 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwgeom_get_type(LWGEOM const*) Unexecuted instantiation: lwgeom.c:lwgeom_get_type Unexecuted instantiation: lwpoint.c:lwgeom_get_type Unexecuted instantiation: lwline.c:lwgeom_get_type Unexecuted instantiation: lwpoly.c:lwgeom_get_type Unexecuted instantiation: lwtriangle.c:lwgeom_get_type Unexecuted instantiation: lwmpoint.c:lwgeom_get_type Unexecuted instantiation: lwmline.c:lwgeom_get_type Unexecuted instantiation: lwmpoly.c:lwgeom_get_type Unexecuted instantiation: lwcollection.c:lwgeom_get_type Unexecuted instantiation: lwcircstring.c:lwgeom_get_type Unexecuted instantiation: lwcompound.c:lwgeom_get_type Unexecuted instantiation: lwcurvepoly.c:lwgeom_get_type Unexecuted instantiation: lwpsurface.c:lwgeom_get_type Unexecuted instantiation: lwtin.c:lwgeom_get_type Unexecuted instantiation: lwiterator.c:lwgeom_get_type Unexecuted instantiation: lwout_wkt.c:lwgeom_get_type Unexecuted instantiation: lwin_wkt.c:lwgeom_get_type Unexecuted instantiation: lwutil.c:lwgeom_get_type Unexecuted instantiation: lwhomogenize.c:lwgeom_get_type Unexecuted instantiation: lwalgorithm.c:lwgeom_get_type Unexecuted instantiation: lwstroke.c:lwgeom_get_type Unexecuted instantiation: lwprint.c:lwgeom_get_type Unexecuted instantiation: gbox.c:lwgeom_get_type Unexecuted instantiation: lwgeodetic.c:lwgeom_get_type Unexecuted instantiation: lwgeom_geos.c:lwgeom_get_type Unexecuted instantiation: lwgeom_geos_node.c:lwgeom_get_type Unexecuted instantiation: lwgeom_geos_split.c:lwgeom_get_type Unexecuted instantiation: lwspheroid.c:lwgeom_get_type Unexecuted instantiation: stringbuffer.c:lwgeom_get_type Unexecuted instantiation: measures.c:lwgeom_get_type Unexecuted instantiation: measures3d.c:lwgeom_get_type Unexecuted instantiation: ptarray.c:lwgeom_get_type Unexecuted instantiation: lwgeom_api.c:lwgeom_get_type Unexecuted instantiation: lwin_wkt_parse.c:lwgeom_get_type Unexecuted instantiation: lwin_wkt_lex.c:lwgeom_get_type Unexecuted instantiation: lwlinearreferencing.c:lwgeom_get_type Unexecuted instantiation: geojson_import_fuzzer.cpp:lwgeom_get_type(LWGEOM const*) Unexecuted instantiation: lwin_geojson.c:lwgeom_get_type Unexecuted instantiation: wkb_import_fuzzer.cpp:lwgeom_get_type(LWGEOM const*) Unexecuted instantiation: lwin_wkb.c:lwgeom_get_type |
147 | | |
148 | | static inline int |
149 | | lwpoint_is_empty(const LWPOINT *point) |
150 | 495k | { |
151 | 495k | return !point->point || point->point->npoints < 1; |
152 | 495k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwpoint_is_empty(LWPOINT const*) lwgeom.c:lwpoint_is_empty Line | Count | Source | 150 | 132k | { | 151 | 132k | return !point->point || point->point->npoints < 1; | 152 | 132k | } |
lwpoint.c:lwpoint_is_empty Line | Count | Source | 150 | 134k | { | 151 | 134k | return !point->point || point->point->npoints < 1; | 152 | 134k | } |
Unexecuted instantiation: lwline.c:lwpoint_is_empty Unexecuted instantiation: lwpoly.c:lwpoint_is_empty Unexecuted instantiation: lwtriangle.c:lwpoint_is_empty Unexecuted instantiation: lwmpoint.c:lwpoint_is_empty Unexecuted instantiation: lwmline.c:lwpoint_is_empty Unexecuted instantiation: lwmpoly.c:lwpoint_is_empty lwcollection.c:lwpoint_is_empty Line | Count | Source | 150 | 227k | { | 151 | 227k | return !point->point || point->point->npoints < 1; | 152 | 227k | } |
Unexecuted instantiation: lwcircstring.c:lwpoint_is_empty Unexecuted instantiation: lwcompound.c:lwpoint_is_empty Unexecuted instantiation: lwcurvepoly.c:lwpoint_is_empty Unexecuted instantiation: lwpsurface.c:lwpoint_is_empty Unexecuted instantiation: lwtin.c:lwpoint_is_empty Unexecuted instantiation: lwiterator.c:lwpoint_is_empty Unexecuted instantiation: lwout_wkt.c:lwpoint_is_empty lwin_wkt.c:lwpoint_is_empty Line | Count | Source | 150 | 1.15k | { | 151 | 1.15k | return !point->point || point->point->npoints < 1; | 152 | 1.15k | } |
Unexecuted instantiation: lwutil.c:lwpoint_is_empty Unexecuted instantiation: lwhomogenize.c:lwpoint_is_empty Unexecuted instantiation: lwalgorithm.c:lwpoint_is_empty Unexecuted instantiation: lwstroke.c:lwpoint_is_empty Unexecuted instantiation: lwprint.c:lwpoint_is_empty Unexecuted instantiation: gbox.c:lwpoint_is_empty Unexecuted instantiation: lwgeodetic.c:lwpoint_is_empty Unexecuted instantiation: lwgeom_geos.c:lwpoint_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwpoint_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwpoint_is_empty Unexecuted instantiation: lwspheroid.c:lwpoint_is_empty Unexecuted instantiation: stringbuffer.c:lwpoint_is_empty Unexecuted instantiation: measures.c:lwpoint_is_empty Unexecuted instantiation: measures3d.c:lwpoint_is_empty Unexecuted instantiation: ptarray.c:lwpoint_is_empty Unexecuted instantiation: lwgeom_api.c:lwpoint_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwpoint_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwpoint_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwpoint_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwpoint_is_empty(LWPOINT const*) Unexecuted instantiation: lwin_geojson.c:lwpoint_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwpoint_is_empty(LWPOINT const*) Unexecuted instantiation: lwin_wkb.c:lwpoint_is_empty |
153 | | |
154 | | static inline int |
155 | | lwline_is_empty(const LWLINE *line) |
156 | 138k | { |
157 | 138k | return !line->points || line->points->npoints < 1; |
158 | 138k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwline_is_empty(LWLINE const*) Line | Count | Source | 156 | 17.0k | { | 157 | 17.0k | return !line->points || line->points->npoints < 1; | 158 | 17.0k | } |
Unexecuted instantiation: lwpoint.c:lwline_is_empty Line | Count | Source | 156 | 17.7k | { | 157 | 17.7k | return !line->points || line->points->npoints < 1; | 158 | 17.7k | } |
Unexecuted instantiation: lwpoly.c:lwline_is_empty Unexecuted instantiation: lwtriangle.c:lwline_is_empty Unexecuted instantiation: lwmpoint.c:lwline_is_empty Unexecuted instantiation: lwmline.c:lwline_is_empty Unexecuted instantiation: lwmpoly.c:lwline_is_empty lwcollection.c:lwline_is_empty Line | Count | Source | 156 | 26.3k | { | 157 | 26.3k | return !line->points || line->points->npoints < 1; | 158 | 26.3k | } |
Unexecuted instantiation: lwcircstring.c:lwline_is_empty lwcompound.c:lwline_is_empty Line | Count | Source | 156 | 33.8k | { | 157 | 33.8k | return !line->points || line->points->npoints < 1; | 158 | 33.8k | } |
Unexecuted instantiation: lwcurvepoly.c:lwline_is_empty Unexecuted instantiation: lwpsurface.c:lwline_is_empty Unexecuted instantiation: lwtin.c:lwline_is_empty Unexecuted instantiation: lwiterator.c:lwline_is_empty Unexecuted instantiation: lwout_wkt.c:lwline_is_empty lwin_wkt.c:lwline_is_empty Line | Count | Source | 156 | 43.0k | { | 157 | 43.0k | return !line->points || line->points->npoints < 1; | 158 | 43.0k | } |
Unexecuted instantiation: lwutil.c:lwline_is_empty Unexecuted instantiation: lwhomogenize.c:lwline_is_empty Unexecuted instantiation: lwalgorithm.c:lwline_is_empty Unexecuted instantiation: lwstroke.c:lwline_is_empty Unexecuted instantiation: lwprint.c:lwline_is_empty Unexecuted instantiation: gbox.c:lwline_is_empty Unexecuted instantiation: lwgeodetic.c:lwline_is_empty Unexecuted instantiation: lwgeom_geos.c:lwline_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwline_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwline_is_empty Unexecuted instantiation: lwspheroid.c:lwline_is_empty Unexecuted instantiation: stringbuffer.c:lwline_is_empty Unexecuted instantiation: measures.c:lwline_is_empty Unexecuted instantiation: measures3d.c:lwline_is_empty Unexecuted instantiation: ptarray.c:lwline_is_empty Unexecuted instantiation: lwgeom_api.c:lwline_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwline_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwline_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwline_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwline_is_empty(LWLINE const*) Unexecuted instantiation: lwin_geojson.c:lwline_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwline_is_empty(LWLINE const*) Unexecuted instantiation: lwin_wkb.c:lwline_is_empty |
159 | | |
160 | | static inline int |
161 | | lwcircstring_is_empty(const LWCIRCSTRING *circ) |
162 | 1.63k | { |
163 | 1.63k | return !circ->points || circ->points->npoints < 1; |
164 | 1.63k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwcircstring_is_empty(LWCIRCSTRING const*) Unexecuted instantiation: lwgeom.c:lwcircstring_is_empty Unexecuted instantiation: lwpoint.c:lwcircstring_is_empty Unexecuted instantiation: lwline.c:lwcircstring_is_empty Unexecuted instantiation: lwpoly.c:lwcircstring_is_empty Unexecuted instantiation: lwtriangle.c:lwcircstring_is_empty Unexecuted instantiation: lwmpoint.c:lwcircstring_is_empty Unexecuted instantiation: lwmline.c:lwcircstring_is_empty Unexecuted instantiation: lwmpoly.c:lwcircstring_is_empty Unexecuted instantiation: lwcollection.c:lwcircstring_is_empty Unexecuted instantiation: lwcircstring.c:lwcircstring_is_empty lwcompound.c:lwcircstring_is_empty Line | Count | Source | 162 | 1.00k | { | 163 | 1.00k | return !circ->points || circ->points->npoints < 1; | 164 | 1.00k | } |
Unexecuted instantiation: lwcurvepoly.c:lwcircstring_is_empty Unexecuted instantiation: lwpsurface.c:lwcircstring_is_empty Unexecuted instantiation: lwtin.c:lwcircstring_is_empty Unexecuted instantiation: lwiterator.c:lwcircstring_is_empty Unexecuted instantiation: lwout_wkt.c:lwcircstring_is_empty lwin_wkt.c:lwcircstring_is_empty Line | Count | Source | 162 | 627 | { | 163 | 627 | return !circ->points || circ->points->npoints < 1; | 164 | 627 | } |
Unexecuted instantiation: lwutil.c:lwcircstring_is_empty Unexecuted instantiation: lwhomogenize.c:lwcircstring_is_empty Unexecuted instantiation: lwalgorithm.c:lwcircstring_is_empty Unexecuted instantiation: lwstroke.c:lwcircstring_is_empty Unexecuted instantiation: lwprint.c:lwcircstring_is_empty Unexecuted instantiation: gbox.c:lwcircstring_is_empty Unexecuted instantiation: lwgeodetic.c:lwcircstring_is_empty Unexecuted instantiation: lwgeom_geos.c:lwcircstring_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwcircstring_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwcircstring_is_empty Unexecuted instantiation: lwspheroid.c:lwcircstring_is_empty Unexecuted instantiation: stringbuffer.c:lwcircstring_is_empty Unexecuted instantiation: measures.c:lwcircstring_is_empty Unexecuted instantiation: measures3d.c:lwcircstring_is_empty Unexecuted instantiation: ptarray.c:lwcircstring_is_empty Unexecuted instantiation: lwgeom_api.c:lwcircstring_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwcircstring_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwcircstring_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwcircstring_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwcircstring_is_empty(LWCIRCSTRING const*) Unexecuted instantiation: lwin_geojson.c:lwcircstring_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwcircstring_is_empty(LWCIRCSTRING const*) Unexecuted instantiation: lwin_wkb.c:lwcircstring_is_empty |
165 | | |
166 | | static inline int |
167 | | lwpoly_is_empty(const LWPOLY *poly) |
168 | 85.5k | { |
169 | 85.5k | return poly->nrings < 1 || !poly->rings || !poly->rings[0] || poly->rings[0]->npoints < 1; |
170 | 85.5k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwpoly_is_empty(LWPOLY const*) Line | Count | Source | 168 | 1.33k | { | 169 | 1.33k | return poly->nrings < 1 || !poly->rings || !poly->rings[0] || poly->rings[0]->npoints < 1; | 170 | 1.33k | } |
Unexecuted instantiation: lwpoint.c:lwpoly_is_empty Unexecuted instantiation: lwline.c:lwpoly_is_empty Line | Count | Source | 168 | 1.54k | { | 169 | 1.54k | return poly->nrings < 1 || !poly->rings || !poly->rings[0] || poly->rings[0]->npoints < 1; | 170 | 1.54k | } |
Unexecuted instantiation: lwtriangle.c:lwpoly_is_empty Unexecuted instantiation: lwmpoint.c:lwpoly_is_empty Unexecuted instantiation: lwmline.c:lwpoly_is_empty Unexecuted instantiation: lwmpoly.c:lwpoly_is_empty lwcollection.c:lwpoly_is_empty Line | Count | Source | 168 | 67.6k | { | 169 | 67.6k | return poly->nrings < 1 || !poly->rings || !poly->rings[0] || poly->rings[0]->npoints < 1; | 170 | 67.6k | } |
Unexecuted instantiation: lwcircstring.c:lwpoly_is_empty Unexecuted instantiation: lwcompound.c:lwpoly_is_empty Unexecuted instantiation: lwcurvepoly.c:lwpoly_is_empty Unexecuted instantiation: lwpsurface.c:lwpoly_is_empty Unexecuted instantiation: lwtin.c:lwpoly_is_empty Unexecuted instantiation: lwiterator.c:lwpoly_is_empty Unexecuted instantiation: lwout_wkt.c:lwpoly_is_empty lwin_wkt.c:lwpoly_is_empty Line | Count | Source | 168 | 15.0k | { | 169 | 15.0k | return poly->nrings < 1 || !poly->rings || !poly->rings[0] || poly->rings[0]->npoints < 1; | 170 | 15.0k | } |
Unexecuted instantiation: lwutil.c:lwpoly_is_empty Unexecuted instantiation: lwhomogenize.c:lwpoly_is_empty Unexecuted instantiation: lwalgorithm.c:lwpoly_is_empty Unexecuted instantiation: lwstroke.c:lwpoly_is_empty Unexecuted instantiation: lwprint.c:lwpoly_is_empty Unexecuted instantiation: gbox.c:lwpoly_is_empty Unexecuted instantiation: lwgeodetic.c:lwpoly_is_empty Unexecuted instantiation: lwgeom_geos.c:lwpoly_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwpoly_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwpoly_is_empty Unexecuted instantiation: lwspheroid.c:lwpoly_is_empty Unexecuted instantiation: stringbuffer.c:lwpoly_is_empty Unexecuted instantiation: measures.c:lwpoly_is_empty Unexecuted instantiation: measures3d.c:lwpoly_is_empty Unexecuted instantiation: ptarray.c:lwpoly_is_empty Unexecuted instantiation: lwgeom_api.c:lwpoly_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwpoly_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwpoly_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwpoly_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwpoly_is_empty(LWPOLY const*) Unexecuted instantiation: lwin_geojson.c:lwpoly_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwpoly_is_empty(LWPOLY const*) Unexecuted instantiation: lwin_wkb.c:lwpoly_is_empty |
171 | | |
172 | | static inline int |
173 | | lwtriangle_is_empty(const LWTRIANGLE *triangle) |
174 | 348 | { |
175 | 348 | return !triangle->points || triangle->points->npoints < 1; |
176 | 348 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwtriangle_is_empty(LWTRIANGLE const*) Unexecuted instantiation: lwgeom.c:lwtriangle_is_empty Unexecuted instantiation: lwpoint.c:lwtriangle_is_empty Unexecuted instantiation: lwline.c:lwtriangle_is_empty Unexecuted instantiation: lwpoly.c:lwtriangle_is_empty Unexecuted instantiation: lwtriangle.c:lwtriangle_is_empty Unexecuted instantiation: lwmpoint.c:lwtriangle_is_empty Unexecuted instantiation: lwmline.c:lwtriangle_is_empty Unexecuted instantiation: lwmpoly.c:lwtriangle_is_empty Unexecuted instantiation: lwcollection.c:lwtriangle_is_empty Unexecuted instantiation: lwcircstring.c:lwtriangle_is_empty Unexecuted instantiation: lwcompound.c:lwtriangle_is_empty Unexecuted instantiation: lwcurvepoly.c:lwtriangle_is_empty Unexecuted instantiation: lwpsurface.c:lwtriangle_is_empty Unexecuted instantiation: lwtin.c:lwtriangle_is_empty Unexecuted instantiation: lwiterator.c:lwtriangle_is_empty Unexecuted instantiation: lwout_wkt.c:lwtriangle_is_empty lwin_wkt.c:lwtriangle_is_empty Line | Count | Source | 174 | 348 | { | 175 | 348 | return !triangle->points || triangle->points->npoints < 1; | 176 | 348 | } |
Unexecuted instantiation: lwutil.c:lwtriangle_is_empty Unexecuted instantiation: lwhomogenize.c:lwtriangle_is_empty Unexecuted instantiation: lwalgorithm.c:lwtriangle_is_empty Unexecuted instantiation: lwstroke.c:lwtriangle_is_empty Unexecuted instantiation: lwprint.c:lwtriangle_is_empty Unexecuted instantiation: gbox.c:lwtriangle_is_empty Unexecuted instantiation: lwgeodetic.c:lwtriangle_is_empty Unexecuted instantiation: lwgeom_geos.c:lwtriangle_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwtriangle_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwtriangle_is_empty Unexecuted instantiation: lwspheroid.c:lwtriangle_is_empty Unexecuted instantiation: stringbuffer.c:lwtriangle_is_empty Unexecuted instantiation: measures.c:lwtriangle_is_empty Unexecuted instantiation: measures3d.c:lwtriangle_is_empty Unexecuted instantiation: ptarray.c:lwtriangle_is_empty Unexecuted instantiation: lwgeom_api.c:lwtriangle_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwtriangle_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwtriangle_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwtriangle_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwtriangle_is_empty(LWTRIANGLE const*) Unexecuted instantiation: lwin_geojson.c:lwtriangle_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwtriangle_is_empty(LWTRIANGLE const*) Unexecuted instantiation: lwin_wkb.c:lwtriangle_is_empty |
177 | | |
178 | | static inline int lwgeom_is_empty(const LWGEOM *geom); |
179 | | |
180 | | static inline int |
181 | | lwcollection_is_empty(const LWCOLLECTION *col) |
182 | 55.1k | { |
183 | 55.1k | uint32_t i; |
184 | 55.1k | if (col->ngeoms == 0 || !col->geoms) |
185 | 11.0k | return LW_TRUE; |
186 | 565k | for (i = 0; i < col->ngeoms; i++) |
187 | 562k | { |
188 | 562k | if (!lwgeom_is_empty(col->geoms[i])) |
189 | 40.7k | return LW_FALSE; |
190 | 562k | } |
191 | 3.35k | return LW_TRUE; |
192 | 44.1k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwcollection_is_empty(LWCOLLECTION const*) lwgeom.c:lwcollection_is_empty Line | Count | Source | 182 | 3.07k | { | 183 | 3.07k | uint32_t i; | 184 | 3.07k | if (col->ngeoms == 0 || !col->geoms) | 185 | 2.10k | return LW_TRUE; | 186 | 153k | for (i = 0; i < col->ngeoms; i++) | 187 | 152k | { | 188 | 152k | if (!lwgeom_is_empty(col->geoms[i])) | 189 | 756 | return LW_FALSE; | 190 | 152k | } | 191 | 213 | return LW_TRUE; | 192 | 969 | } |
Unexecuted instantiation: lwpoint.c:lwcollection_is_empty Unexecuted instantiation: lwline.c:lwcollection_is_empty Unexecuted instantiation: lwpoly.c:lwcollection_is_empty Unexecuted instantiation: lwtriangle.c:lwcollection_is_empty Unexecuted instantiation: lwmpoint.c:lwcollection_is_empty Unexecuted instantiation: lwmline.c:lwcollection_is_empty Unexecuted instantiation: lwmpoly.c:lwcollection_is_empty lwcollection.c:lwcollection_is_empty Line | Count | Source | 182 | 10.0k | { | 183 | 10.0k | uint32_t i; | 184 | 10.0k | if (col->ngeoms == 0 || !col->geoms) | 185 | 5.34k | return LW_TRUE; | 186 | 328k | for (i = 0; i < col->ngeoms; i++) | 187 | 327k | { | 188 | 327k | if (!lwgeom_is_empty(col->geoms[i])) | 189 | 3.07k | return LW_FALSE; | 190 | 327k | } | 191 | 1.60k | return LW_TRUE; | 192 | 4.68k | } |
Unexecuted instantiation: lwcircstring.c:lwcollection_is_empty Unexecuted instantiation: lwcompound.c:lwcollection_is_empty Unexecuted instantiation: lwcurvepoly.c:lwcollection_is_empty Unexecuted instantiation: lwpsurface.c:lwcollection_is_empty Unexecuted instantiation: lwtin.c:lwcollection_is_empty Unexecuted instantiation: lwiterator.c:lwcollection_is_empty Unexecuted instantiation: lwout_wkt.c:lwcollection_is_empty lwin_wkt.c:lwcollection_is_empty Line | Count | Source | 182 | 42.0k | { | 183 | 42.0k | uint32_t i; | 184 | 42.0k | if (col->ngeoms == 0 || !col->geoms) | 185 | 3.55k | return LW_TRUE; | 186 | 83.5k | for (i = 0; i < col->ngeoms; i++) | 187 | 81.9k | { | 188 | 81.9k | if (!lwgeom_is_empty(col->geoms[i])) | 189 | 36.9k | return LW_FALSE; | 190 | 81.9k | } | 191 | 1.53k | return LW_TRUE; | 192 | 38.5k | } |
Unexecuted instantiation: lwutil.c:lwcollection_is_empty Unexecuted instantiation: lwhomogenize.c:lwcollection_is_empty Unexecuted instantiation: lwalgorithm.c:lwcollection_is_empty Unexecuted instantiation: lwstroke.c:lwcollection_is_empty Unexecuted instantiation: lwprint.c:lwcollection_is_empty Unexecuted instantiation: gbox.c:lwcollection_is_empty Unexecuted instantiation: lwgeodetic.c:lwcollection_is_empty Unexecuted instantiation: lwgeom_geos.c:lwcollection_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwcollection_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwcollection_is_empty Unexecuted instantiation: lwspheroid.c:lwcollection_is_empty Unexecuted instantiation: stringbuffer.c:lwcollection_is_empty Unexecuted instantiation: measures.c:lwcollection_is_empty Unexecuted instantiation: measures3d.c:lwcollection_is_empty Unexecuted instantiation: ptarray.c:lwcollection_is_empty Unexecuted instantiation: lwgeom_api.c:lwcollection_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwcollection_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwcollection_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwcollection_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwcollection_is_empty(LWCOLLECTION const*) Unexecuted instantiation: lwin_geojson.c:lwcollection_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwcollection_is_empty(LWCOLLECTION const*) Unexecuted instantiation: lwin_wkb.c:lwcollection_is_empty |
193 | | |
194 | | /** |
195 | | * Return true or false depending on whether a geometry is an "empty" |
196 | | * geometry (no vertices members) |
197 | | */ |
198 | | static inline int |
199 | | lwgeom_is_empty(const LWGEOM *geom) |
200 | 618k | { |
201 | 618k | switch (geom->type) |
202 | 618k | { |
203 | 360k | case POINTTYPE: |
204 | 360k | return lwpoint_is_empty((LWPOINT *)geom); |
205 | 0 | break; |
206 | 120k | case LINETYPE: |
207 | 120k | return lwline_is_empty((LWLINE *)geom); |
208 | 0 | break; |
209 | 1.63k | case CIRCSTRINGTYPE: |
210 | 1.63k | return lwcircstring_is_empty((LWCIRCSTRING *)geom); |
211 | 0 | break; |
212 | 84.0k | case POLYGONTYPE: |
213 | 84.0k | return lwpoly_is_empty((LWPOLY *)geom); |
214 | 0 | break; |
215 | 348 | case TRIANGLETYPE: |
216 | 348 | return lwtriangle_is_empty((LWTRIANGLE *)geom); |
217 | 0 | break; |
218 | 3.61k | case MULTIPOINTTYPE: |
219 | 5.11k | case MULTILINETYPE: |
220 | 6.80k | case MULTIPOLYGONTYPE: |
221 | 7.00k | case COMPOUNDTYPE: |
222 | 7.62k | case CURVEPOLYTYPE: |
223 | 7.85k | case MULTICURVETYPE: |
224 | 8.18k | case MULTISURFACETYPE: |
225 | 8.63k | case POLYHEDRALSURFACETYPE: |
226 | 10.0k | case TINTYPE: |
227 | 51.2k | case COLLECTIONTYPE: |
228 | 51.2k | return lwcollection_is_empty((LWCOLLECTION *)geom); |
229 | 0 | break; |
230 | 0 | default: |
231 | 0 | return LW_FALSE; |
232 | 0 | break; |
233 | 618k | } |
234 | 618k | } Unexecuted instantiation: wkt_import_fuzzer.cpp:lwgeom_is_empty(LWGEOM const*) Line | Count | Source | 200 | 153k | { | 201 | 153k | switch (geom->type) | 202 | 153k | { | 203 | 132k | case POINTTYPE: | 204 | 132k | return lwpoint_is_empty((LWPOINT *)geom); | 205 | 0 | break; | 206 | 17.0k | case LINETYPE: | 207 | 17.0k | return lwline_is_empty((LWLINE *)geom); | 208 | 0 | break; | 209 | 0 | case CIRCSTRINGTYPE: | 210 | 0 | return lwcircstring_is_empty((LWCIRCSTRING *)geom); | 211 | 0 | break; | 212 | 1.33k | case POLYGONTYPE: | 213 | 1.33k | return lwpoly_is_empty((LWPOLY *)geom); | 214 | 0 | break; | 215 | 0 | case TRIANGLETYPE: | 216 | 0 | return lwtriangle_is_empty((LWTRIANGLE *)geom); | 217 | 0 | break; | 218 | 1.36k | case MULTIPOINTTYPE: | 219 | 1.79k | case MULTILINETYPE: | 220 | 2.36k | case MULTIPOLYGONTYPE: | 221 | 2.36k | case COMPOUNDTYPE: | 222 | 2.36k | case CURVEPOLYTYPE: | 223 | 2.36k | case MULTICURVETYPE: | 224 | 2.36k | case MULTISURFACETYPE: | 225 | 2.36k | case POLYHEDRALSURFACETYPE: | 226 | 2.36k | case TINTYPE: | 227 | 3.07k | case COLLECTIONTYPE: | 228 | 3.07k | return lwcollection_is_empty((LWCOLLECTION *)geom); | 229 | 0 | break; | 230 | 0 | default: | 231 | 0 | return LW_FALSE; | 232 | 0 | break; | 233 | 153k | } | 234 | 153k | } |
Unexecuted instantiation: lwpoint.c:lwgeom_is_empty Unexecuted instantiation: lwline.c:lwgeom_is_empty Unexecuted instantiation: lwpoly.c:lwgeom_is_empty Unexecuted instantiation: lwtriangle.c:lwgeom_is_empty Unexecuted instantiation: lwmpoint.c:lwgeom_is_empty Unexecuted instantiation: lwmline.c:lwgeom_is_empty Unexecuted instantiation: lwmpoly.c:lwgeom_is_empty lwcollection.c:lwgeom_is_empty Line | Count | Source | 200 | 327k | { | 201 | 327k | switch (geom->type) | 202 | 327k | { | 203 | 227k | case POINTTYPE: | 204 | 227k | return lwpoint_is_empty((LWPOINT *)geom); | 205 | 0 | break; | 206 | 26.3k | case LINETYPE: | 207 | 26.3k | return lwline_is_empty((LWLINE *)geom); | 208 | 0 | break; | 209 | 0 | case CIRCSTRINGTYPE: | 210 | 0 | return lwcircstring_is_empty((LWCIRCSTRING *)geom); | 211 | 0 | break; | 212 | 67.6k | case POLYGONTYPE: | 213 | 67.6k | return lwpoly_is_empty((LWPOLY *)geom); | 214 | 0 | break; | 215 | 0 | case TRIANGLETYPE: | 216 | 0 | return lwtriangle_is_empty((LWTRIANGLE *)geom); | 217 | 0 | break; | 218 | 1.97k | case MULTIPOINTTYPE: | 219 | 2.85k | case MULTILINETYPE: | 220 | 3.78k | case MULTIPOLYGONTYPE: | 221 | 3.78k | case COMPOUNDTYPE: | 222 | 3.78k | case CURVEPOLYTYPE: | 223 | 3.78k | case MULTICURVETYPE: | 224 | 3.78k | case MULTISURFACETYPE: | 225 | 3.78k | case POLYHEDRALSURFACETYPE: | 226 | 3.78k | case TINTYPE: | 227 | 6.08k | case COLLECTIONTYPE: | 228 | 6.08k | return lwcollection_is_empty((LWCOLLECTION *)geom); | 229 | 0 | break; | 230 | 0 | default: | 231 | 0 | return LW_FALSE; | 232 | 0 | break; | 233 | 327k | } | 234 | 327k | } |
Unexecuted instantiation: lwcircstring.c:lwgeom_is_empty lwcompound.c:lwgeom_is_empty Line | Count | Source | 200 | 34.8k | { | 201 | 34.8k | switch (geom->type) | 202 | 34.8k | { | 203 | 0 | case POINTTYPE: | 204 | 0 | return lwpoint_is_empty((LWPOINT *)geom); | 205 | 0 | break; | 206 | 33.8k | case LINETYPE: | 207 | 33.8k | return lwline_is_empty((LWLINE *)geom); | 208 | 0 | break; | 209 | 1.00k | case CIRCSTRINGTYPE: | 210 | 1.00k | return lwcircstring_is_empty((LWCIRCSTRING *)geom); | 211 | 0 | break; | 212 | 0 | case POLYGONTYPE: | 213 | 0 | return lwpoly_is_empty((LWPOLY *)geom); | 214 | 0 | break; | 215 | 0 | case TRIANGLETYPE: | 216 | 0 | return lwtriangle_is_empty((LWTRIANGLE *)geom); | 217 | 0 | break; | 218 | 0 | case MULTIPOINTTYPE: | 219 | 0 | case MULTILINETYPE: | 220 | 0 | case MULTIPOLYGONTYPE: | 221 | 0 | case COMPOUNDTYPE: | 222 | 0 | case CURVEPOLYTYPE: | 223 | 0 | case MULTICURVETYPE: | 224 | 0 | case MULTISURFACETYPE: | 225 | 0 | case POLYHEDRALSURFACETYPE: | 226 | 0 | case TINTYPE: | 227 | 0 | case COLLECTIONTYPE: | 228 | 0 | return lwcollection_is_empty((LWCOLLECTION *)geom); | 229 | 0 | break; | 230 | 0 | default: | 231 | 0 | return LW_FALSE; | 232 | 0 | break; | 233 | 34.8k | } | 234 | 34.8k | } |
Unexecuted instantiation: lwcurvepoly.c:lwgeom_is_empty Unexecuted instantiation: lwpsurface.c:lwgeom_is_empty Unexecuted instantiation: lwtin.c:lwgeom_is_empty Unexecuted instantiation: lwiterator.c:lwgeom_is_empty Unexecuted instantiation: lwout_wkt.c:lwgeom_is_empty lwin_wkt.c:lwgeom_is_empty Line | Count | Source | 200 | 102k | { | 201 | 102k | switch (geom->type) | 202 | 102k | { | 203 | 1.15k | case POINTTYPE: | 204 | 1.15k | return lwpoint_is_empty((LWPOINT *)geom); | 205 | 0 | break; | 206 | 43.0k | case LINETYPE: | 207 | 43.0k | return lwline_is_empty((LWLINE *)geom); | 208 | 0 | break; | 209 | 627 | case CIRCSTRINGTYPE: | 210 | 627 | return lwcircstring_is_empty((LWCIRCSTRING *)geom); | 211 | 0 | break; | 212 | 15.0k | case POLYGONTYPE: | 213 | 15.0k | return lwpoly_is_empty((LWPOLY *)geom); | 214 | 0 | break; | 215 | 348 | case TRIANGLETYPE: | 216 | 348 | return lwtriangle_is_empty((LWTRIANGLE *)geom); | 217 | 0 | break; | 218 | 272 | case MULTIPOINTTYPE: | 219 | 468 | case MULTILINETYPE: | 220 | 662 | case MULTIPOLYGONTYPE: | 221 | 863 | case COMPOUNDTYPE: | 222 | 1.47k | case CURVEPOLYTYPE: | 223 | 1.70k | case MULTICURVETYPE: | 224 | 2.03k | case MULTISURFACETYPE: | 225 | 2.48k | case POLYHEDRALSURFACETYPE: | 226 | 3.89k | case TINTYPE: | 227 | 42.0k | case COLLECTIONTYPE: | 228 | 42.0k | return lwcollection_is_empty((LWCOLLECTION *)geom); | 229 | 0 | break; | 230 | 0 | default: | 231 | 0 | return LW_FALSE; | 232 | 0 | break; | 233 | 102k | } | 234 | 102k | } |
Unexecuted instantiation: lwutil.c:lwgeom_is_empty Unexecuted instantiation: lwhomogenize.c:lwgeom_is_empty Unexecuted instantiation: lwalgorithm.c:lwgeom_is_empty Unexecuted instantiation: lwstroke.c:lwgeom_is_empty Unexecuted instantiation: lwprint.c:lwgeom_is_empty Unexecuted instantiation: gbox.c:lwgeom_is_empty Unexecuted instantiation: lwgeodetic.c:lwgeom_is_empty Unexecuted instantiation: lwgeom_geos.c:lwgeom_is_empty Unexecuted instantiation: lwgeom_geos_node.c:lwgeom_is_empty Unexecuted instantiation: lwgeom_geos_split.c:lwgeom_is_empty Unexecuted instantiation: lwspheroid.c:lwgeom_is_empty Unexecuted instantiation: stringbuffer.c:lwgeom_is_empty Unexecuted instantiation: measures.c:lwgeom_is_empty Unexecuted instantiation: measures3d.c:lwgeom_is_empty Unexecuted instantiation: ptarray.c:lwgeom_is_empty Unexecuted instantiation: lwgeom_api.c:lwgeom_is_empty Unexecuted instantiation: lwin_wkt_parse.c:lwgeom_is_empty Unexecuted instantiation: lwin_wkt_lex.c:lwgeom_is_empty Unexecuted instantiation: lwlinearreferencing.c:lwgeom_is_empty Unexecuted instantiation: geojson_import_fuzzer.cpp:lwgeom_is_empty(LWGEOM const*) Unexecuted instantiation: lwin_geojson.c:lwgeom_is_empty Unexecuted instantiation: wkb_import_fuzzer.cpp:lwgeom_is_empty(LWGEOM const*) Unexecuted instantiation: lwin_wkb.c:lwgeom_is_empty |
235 | | |
236 | | inline static uint64_t |
237 | | uint64_interleave_2(uint64_t x, uint64_t y) |
238 | 0 | { |
239 | 0 | x = (x | (x << 16)) & 0x0000FFFF0000FFFFULL; |
240 | 0 | x = (x | (x << 8)) & 0x00FF00FF00FF00FFULL; |
241 | 0 | x = (x | (x << 4)) & 0x0F0F0F0F0F0F0F0FULL; |
242 | 0 | x = (x | (x << 2)) & 0x3333333333333333ULL; |
243 | 0 | x = (x | (x << 1)) & 0x5555555555555555ULL; |
244 | |
|
245 | 0 | y = (y | (y << 16)) & 0x0000FFFF0000FFFFULL; |
246 | 0 | y = (y | (y << 8)) & 0x00FF00FF00FF00FFULL; |
247 | 0 | y = (y | (y << 4)) & 0x0F0F0F0F0F0F0F0FULL; |
248 | 0 | y = (y | (y << 2)) & 0x3333333333333333ULL; |
249 | 0 | y = (y | (y << 1)) & 0x5555555555555555ULL; |
250 | |
|
251 | 0 | return x | (y << 1); |
252 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:uint64_interleave_2(unsigned long, unsigned long) Unexecuted instantiation: lwgeom.c:uint64_interleave_2 Unexecuted instantiation: lwpoint.c:uint64_interleave_2 Unexecuted instantiation: lwline.c:uint64_interleave_2 Unexecuted instantiation: lwpoly.c:uint64_interleave_2 Unexecuted instantiation: lwtriangle.c:uint64_interleave_2 Unexecuted instantiation: lwmpoint.c:uint64_interleave_2 Unexecuted instantiation: lwmline.c:uint64_interleave_2 Unexecuted instantiation: lwmpoly.c:uint64_interleave_2 Unexecuted instantiation: lwcollection.c:uint64_interleave_2 Unexecuted instantiation: lwcircstring.c:uint64_interleave_2 Unexecuted instantiation: lwcompound.c:uint64_interleave_2 Unexecuted instantiation: lwcurvepoly.c:uint64_interleave_2 Unexecuted instantiation: lwpsurface.c:uint64_interleave_2 Unexecuted instantiation: lwtin.c:uint64_interleave_2 Unexecuted instantiation: lwiterator.c:uint64_interleave_2 Unexecuted instantiation: lwout_wkt.c:uint64_interleave_2 Unexecuted instantiation: lwin_wkt.c:uint64_interleave_2 Unexecuted instantiation: lwutil.c:uint64_interleave_2 Unexecuted instantiation: lwhomogenize.c:uint64_interleave_2 Unexecuted instantiation: lwalgorithm.c:uint64_interleave_2 Unexecuted instantiation: lwstroke.c:uint64_interleave_2 Unexecuted instantiation: lwprint.c:uint64_interleave_2 Unexecuted instantiation: gbox.c:uint64_interleave_2 Unexecuted instantiation: lwgeodetic.c:uint64_interleave_2 Unexecuted instantiation: lwgeom_geos.c:uint64_interleave_2 Unexecuted instantiation: lwgeom_geos_node.c:uint64_interleave_2 Unexecuted instantiation: lwgeom_geos_split.c:uint64_interleave_2 Unexecuted instantiation: lwspheroid.c:uint64_interleave_2 Unexecuted instantiation: stringbuffer.c:uint64_interleave_2 Unexecuted instantiation: measures.c:uint64_interleave_2 Unexecuted instantiation: measures3d.c:uint64_interleave_2 Unexecuted instantiation: ptarray.c:uint64_interleave_2 Unexecuted instantiation: lwgeom_api.c:uint64_interleave_2 Unexecuted instantiation: lwin_wkt_parse.c:uint64_interleave_2 Unexecuted instantiation: lwin_wkt_lex.c:uint64_interleave_2 Unexecuted instantiation: lwlinearreferencing.c:uint64_interleave_2 Unexecuted instantiation: geojson_import_fuzzer.cpp:uint64_interleave_2(unsigned long, unsigned long) Unexecuted instantiation: lwin_geojson.c:uint64_interleave_2 Unexecuted instantiation: wkb_import_fuzzer.cpp:uint64_interleave_2(unsigned long, unsigned long) Unexecuted instantiation: lwin_wkb.c:uint64_interleave_2 |
253 | | |
254 | | /* Based on https://github.com/rawrunprotected/hilbert_curves Public Domain code */ |
255 | | inline static uint64_t |
256 | | uint32_hilbert(uint32_t px, uint32_t py) |
257 | 0 | { |
258 | 0 | uint64_t x = px; |
259 | 0 | uint64_t y = py; |
260 | |
|
261 | 0 | uint64_t A, B, C, D; |
262 | 0 | uint64_t a, b, c, d; |
263 | 0 | uint64_t i0, i1; |
264 | | |
265 | | // Initial prefix scan round, prime with x and y |
266 | 0 | { |
267 | 0 | a = x ^ y; |
268 | 0 | b = 0xFFFFFFFFULL ^ a; |
269 | 0 | c = 0xFFFFFFFFULL ^ (x | y); |
270 | 0 | d = x & (y ^ 0xFFFFFFFFULL); |
271 | |
|
272 | 0 | A = a | (b >> 1); |
273 | 0 | B = (a >> 1) ^ a; |
274 | 0 | C = ((c >> 1) ^ (b & (d >> 1))) ^ c; |
275 | 0 | D = ((a & (c >> 1)) ^ (d >> 1)) ^ d; |
276 | 0 | } |
277 | |
|
278 | 0 | { |
279 | 0 | a = A; |
280 | 0 | b = B; |
281 | 0 | c = C; |
282 | 0 | d = D; |
283 | |
|
284 | 0 | A = ((a & (a >> 2)) ^ (b & (b >> 2))); |
285 | 0 | B = ((a & (b >> 2)) ^ (b & ((a ^ b) >> 2))); |
286 | 0 | C ^= ((a & (c >> 2)) ^ (b & (d >> 2))); |
287 | 0 | D ^= ((b & (c >> 2)) ^ ((a ^ b) & (d >> 2))); |
288 | 0 | } |
289 | |
|
290 | 0 | { |
291 | 0 | a = A; |
292 | 0 | b = B; |
293 | 0 | c = C; |
294 | 0 | d = D; |
295 | |
|
296 | 0 | A = ((a & (a >> 4)) ^ (b & (b >> 4))); |
297 | 0 | B = ((a & (b >> 4)) ^ (b & ((a ^ b) >> 4))); |
298 | 0 | C ^= ((a & (c >> 4)) ^ (b & (d >> 4))); |
299 | 0 | D ^= ((b & (c >> 4)) ^ ((a ^ b) & (d >> 4))); |
300 | 0 | } |
301 | |
|
302 | 0 | { |
303 | 0 | a = A; |
304 | 0 | b = B; |
305 | 0 | c = C; |
306 | 0 | d = D; |
307 | |
|
308 | 0 | A = ((a & (a >> 8)) ^ (b & (b >> 8))); |
309 | 0 | B = ((a & (b >> 8)) ^ (b & ((a ^ b) >> 8))); |
310 | 0 | C ^= ((a & (c >> 8)) ^ (b & (d >> 8))); |
311 | 0 | D ^= ((b & (c >> 8)) ^ ((a ^ b) & (d >> 8))); |
312 | 0 | } |
313 | |
|
314 | 0 | { |
315 | 0 | a = A; |
316 | 0 | b = B; |
317 | 0 | c = C; |
318 | 0 | d = D; |
319 | |
|
320 | 0 | C ^= ((a & (c >> 16)) ^ (b & (d >> 16))); |
321 | 0 | D ^= ((b & (c >> 16)) ^ ((a ^ b) & (d >> 16))); |
322 | 0 | } |
323 | | |
324 | | // Undo transformation prefix scan |
325 | 0 | a = C ^ (C >> 1); |
326 | 0 | b = D ^ (D >> 1); |
327 | | |
328 | | // Recover index bits |
329 | 0 | i0 = x ^ y; |
330 | 0 | i1 = b | (0xFFFFFFFFULL ^ (i0 | a)); |
331 | |
|
332 | 0 | return uint64_interleave_2(i0, i1); |
333 | 0 | } Unexecuted instantiation: wkt_import_fuzzer.cpp:uint32_hilbert(unsigned int, unsigned int) Unexecuted instantiation: lwgeom.c:uint32_hilbert Unexecuted instantiation: lwpoint.c:uint32_hilbert Unexecuted instantiation: lwline.c:uint32_hilbert Unexecuted instantiation: lwpoly.c:uint32_hilbert Unexecuted instantiation: lwtriangle.c:uint32_hilbert Unexecuted instantiation: lwmpoint.c:uint32_hilbert Unexecuted instantiation: lwmline.c:uint32_hilbert Unexecuted instantiation: lwmpoly.c:uint32_hilbert Unexecuted instantiation: lwcollection.c:uint32_hilbert Unexecuted instantiation: lwcircstring.c:uint32_hilbert Unexecuted instantiation: lwcompound.c:uint32_hilbert Unexecuted instantiation: lwcurvepoly.c:uint32_hilbert Unexecuted instantiation: lwpsurface.c:uint32_hilbert Unexecuted instantiation: lwtin.c:uint32_hilbert Unexecuted instantiation: lwiterator.c:uint32_hilbert Unexecuted instantiation: lwout_wkt.c:uint32_hilbert Unexecuted instantiation: lwin_wkt.c:uint32_hilbert Unexecuted instantiation: lwutil.c:uint32_hilbert Unexecuted instantiation: lwhomogenize.c:uint32_hilbert Unexecuted instantiation: lwalgorithm.c:uint32_hilbert Unexecuted instantiation: lwstroke.c:uint32_hilbert Unexecuted instantiation: lwprint.c:uint32_hilbert Unexecuted instantiation: gbox.c:uint32_hilbert Unexecuted instantiation: lwgeodetic.c:uint32_hilbert Unexecuted instantiation: lwgeom_geos.c:uint32_hilbert Unexecuted instantiation: lwgeom_geos_node.c:uint32_hilbert Unexecuted instantiation: lwgeom_geos_split.c:uint32_hilbert Unexecuted instantiation: lwspheroid.c:uint32_hilbert Unexecuted instantiation: stringbuffer.c:uint32_hilbert Unexecuted instantiation: measures.c:uint32_hilbert Unexecuted instantiation: measures3d.c:uint32_hilbert Unexecuted instantiation: ptarray.c:uint32_hilbert Unexecuted instantiation: lwgeom_api.c:uint32_hilbert Unexecuted instantiation: lwin_wkt_parse.c:uint32_hilbert Unexecuted instantiation: lwin_wkt_lex.c:uint32_hilbert Unexecuted instantiation: lwlinearreferencing.c:uint32_hilbert Unexecuted instantiation: geojson_import_fuzzer.cpp:uint32_hilbert(unsigned int, unsigned int) Unexecuted instantiation: lwin_geojson.c:uint32_hilbert Unexecuted instantiation: wkb_import_fuzzer.cpp:uint32_hilbert(unsigned int, unsigned int) Unexecuted instantiation: lwin_wkb.c:uint32_hilbert |
334 | | |
335 | | /* |
336 | | * This macro is based on PG_FREE_IF_COPY, except that it accepts two pointers. |
337 | | * See PG_FREE_IF_COPY comment in src/include/fmgr.h in postgres source code |
338 | | * for more details. |
339 | | */ |
340 | | #define POSTGIS_FREE_IF_COPY_P(ptrsrc, ptrori) \ |
341 | | do \ |
342 | | { \ |
343 | | if ((Pointer)(ptrsrc) != (Pointer)(ptrori)) \ |
344 | | pfree(ptrsrc); \ |
345 | | } while (0) |