Skip to content

Commit ca4cd10

Browse files
committed
Use stubs for function definitions
1 parent 409630e commit ca4cd10

File tree

4 files changed

+183
-118
lines changed

4 files changed

+183
-118
lines changed

geospatial.c

Lines changed: 7 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
+----------------------------------------------------------------------+
33
| PHP |
44
+----------------------------------------------------------------------+
5-
| Copyright (c) 1997-2022 The PHP Group |
5+
| Copyright (c) 1997-2024 The PHP Group |
66
+----------------------------------------------------------------------+
77
| This source file is subject to version 3.01 of the PHP license, |
88
| that is bundled with this package in the file LICENSE, and is |
@@ -27,7 +27,10 @@
2727
#include "php.h"
2828
#include "php_ini.h"
2929
#include "ext/standard/info.h"
30+
3031
#include "php_geospatial.h"
32+
#include "php_geospatial_arginfo.h"
33+
3134
#include "geo_array.h"
3235
#include "geo_lat_long.h"
3336
#include "geohash.h"
@@ -76,127 +79,14 @@ const geo_helmert_constants osgb36_wgs84 = {
7679
0.8421
7780
};
7881

79-
ZEND_BEGIN_ARG_INFO_EX(haversine_args, 0, 0, 2)
80-
ZEND_ARG_INFO(0, geoJsonPointFrom)
81-
ZEND_ARG_INFO(0, geoJsonPointTo)
82-
ZEND_ARG_INFO(0, radius)
83-
ZEND_END_ARG_INFO()
84-
85-
ZEND_BEGIN_ARG_INFO_EX(vincenty_args, 0, 0, 2)
86-
ZEND_ARG_INFO(0, geoJsonPointFrom)
87-
ZEND_ARG_INFO(0, geoJsonPointTo)
88-
ZEND_ARG_INFO(0, reference_ellipsoid)
89-
ZEND_END_ARG_INFO()
90-
91-
ZEND_BEGIN_ARG_INFO_EX(fraction_along_gc_line_args, 0, 0, 3)
92-
ZEND_ARG_INFO(0, geoJsonPointFrom)
93-
ZEND_ARG_INFO(0, geoJsonPointTo)
94-
ZEND_ARG_INFO(0, fraction)
95-
ZEND_ARG_INFO(0, radius)
96-
ZEND_END_ARG_INFO()
97-
98-
ZEND_BEGIN_ARG_INFO_EX(initial_bearing_args, 0, 0, 2)
99-
ZEND_ARG_INFO(0, geoJsonPointFrom)
100-
ZEND_ARG_INFO(0, geoJsonPointTo)
101-
ZEND_ARG_INFO(0, radius)
102-
ZEND_END_ARG_INFO()
103-
104-
ZEND_BEGIN_ARG_INFO_EX(helmert_args, 0, 0, 3)
105-
ZEND_ARG_INFO(0, x)
106-
ZEND_ARG_INFO(0, y)
107-
ZEND_ARG_INFO(0, z)
108-
ZEND_ARG_INFO(0, from_reference_ellipsoid)
109-
ZEND_ARG_INFO(0, to_reference_ellipsoid)
110-
ZEND_END_ARG_INFO()
111-
112-
ZEND_BEGIN_ARG_INFO_EX(polar_to_cartesian_args, 0, 0, 2)
113-
ZEND_ARG_INFO(0, latitude)
114-
ZEND_ARG_INFO(0, longitude)
115-
ZEND_ARG_INFO(0, reference_ellipsoid)
116-
ZEND_END_ARG_INFO()
117-
118-
ZEND_BEGIN_ARG_INFO_EX(cartesian_to_polar_args, 0, 0, 3)
119-
ZEND_ARG_INFO(0, x)
120-
ZEND_ARG_INFO(0, y)
121-
ZEND_ARG_INFO(0, z)
122-
ZEND_ARG_INFO(0, reference_ellipsoid)
123-
ZEND_END_ARG_INFO()
124-
125-
ZEND_BEGIN_ARG_INFO_EX(transform_datum_args, 0, 0, 3)
126-
ZEND_ARG_INFO(0, GeoJSONPoint)
127-
ZEND_ARG_INFO(0, from_reference_ellipsoid)
128-
ZEND_ARG_INFO(0, to_reference_ellipsoid)
129-
ZEND_END_ARG_INFO()
130-
131-
ZEND_BEGIN_ARG_INFO_EX(dms_to_decimal_args, 0, 0, 3)
132-
ZEND_ARG_INFO(0, degrees)
133-
ZEND_ARG_INFO(0, minutes)
134-
ZEND_ARG_INFO(0, seconds)
135-
ZEND_ARG_INFO(0, direction)
136-
ZEND_END_ARG_INFO()
137-
138-
ZEND_BEGIN_ARG_INFO_EX(decimal_to_dms_args, 0, 0, 2)
139-
ZEND_ARG_INFO(0, decimal)
140-
ZEND_ARG_INFO(0, coordinate)
141-
ZEND_END_ARG_INFO()
142-
143-
ZEND_BEGIN_ARG_INFO_EX(rdp_simplify_args, 0, 0, 2)
144-
ZEND_ARG_INFO(0, pointsArray)
145-
ZEND_ARG_INFO(0, epsilon)
146-
ZEND_END_ARG_INFO()
147-
148-
ZEND_BEGIN_ARG_INFO_EX(interpolate_linestring_args, 0, 0, 2)
149-
ZEND_ARG_INFO(0, GeoJSONLineString)
150-
ZEND_ARG_INFO(0, epsilon)
151-
ZEND_END_ARG_INFO()
152-
153-
ZEND_BEGIN_ARG_INFO_EX(interpolate_polygon_args, 0, 0, 2)
154-
ZEND_ARG_INFO(0, GeoJSONPolygon)
155-
ZEND_ARG_INFO(0, epsilon)
156-
ZEND_END_ARG_INFO()
157-
158-
ZEND_BEGIN_ARG_INFO_EX(geohash_encode_args, 0, 0, 2)
159-
ZEND_ARG_INFO(0, GeoJSONPoint)
160-
ZEND_ARG_INFO(0, precision)
161-
ZEND_END_ARG_INFO()
162-
163-
ZEND_BEGIN_ARG_INFO_EX(geohash_decode_args, 0, 0, 1)
164-
ZEND_ARG_INFO(0, geohash)
165-
ZEND_END_ARG_INFO()
166-
167-
/* {{{ geospatial_functions[]
168-
*
169-
* Every user visible function must have an entry in geospatial_functions[].
170-
*/
171-
const zend_function_entry geospatial_functions[] = {
172-
PHP_FE(haversine, haversine_args)
173-
PHP_FE(initial_bearing, initial_bearing_args)
174-
PHP_FE(fraction_along_gc_line, fraction_along_gc_line_args)
175-
PHP_FE(helmert, helmert_args)
176-
PHP_FE(polar_to_cartesian, polar_to_cartesian_args)
177-
PHP_FE(cartesian_to_polar, cartesian_to_polar_args)
178-
PHP_FE(transform_datum, transform_datum_args)
179-
PHP_FE(dms_to_decimal, dms_to_decimal_args)
180-
PHP_FE(decimal_to_dms, decimal_to_dms_args)
181-
PHP_FE(vincenty, vincenty_args)
182-
PHP_FE(rdp_simplify, rdp_simplify_args)
183-
PHP_FE(interpolate_linestring, interpolate_linestring_args)
184-
PHP_FE(interpolate_polygon, interpolate_polygon_args)
185-
PHP_FE(geohash_encode, geohash_encode_args)
186-
PHP_FE(geohash_decode, geohash_decode_args)
187-
/* End of functions */
188-
{ NULL, NULL, NULL }
189-
};
190-
/* }}} */
191-
19282
/* {{{ geospatial_module_entry
19383
*/
19484
zend_module_entry geospatial_module_entry = {
19585
#if ZEND_MODULE_API_NO >= 20010901
19686
STANDARD_MODULE_HEADER,
19787
#endif
19888
"geospatial",
199-
geospatial_functions,
89+
ext_functions,
20090
PHP_MINIT(geospatial),
20191
NULL,
20292
NULL,
@@ -607,7 +497,7 @@ PHP_FUNCTION(helmert)
607497
PHP_FUNCTION(polar_to_cartesian)
608498
{
609499
double latitude, longitude;
610-
long reference_ellipsoid;
500+
long reference_ellipsoid = 0;
611501
geo_cartesian point;
612502

613503
if (zend_parse_parameters(ZEND_NUM_ARGS(), "dd|l", &latitude, &longitude, &reference_ellipsoid) == FAILURE) {
@@ -628,7 +518,7 @@ PHP_FUNCTION(polar_to_cartesian)
628518
PHP_FUNCTION(cartesian_to_polar)
629519
{
630520
double x, y, z;
631-
long reference_ellipsoid;
521+
long reference_ellipsoid = 0;
632522
geo_lat_long polar;
633523

634524
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ddd|l", &x, &y, &z, &reference_ellipsoid) == FAILURE) {

package.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
<file name="geo_array.h" role="src" />
5151
<file name="geo_lat_long.h" role="src" />
5252
<file name="geohash.h" role="src" />
53+
<file name="php_geospatial_arginfo.h" role="src" />
5354
<file name="php_geospatial.h" role="src" />
5455
<file name="geo_array.c" role="src" />
5556
<file name="geohash.c" role="src" />
@@ -59,7 +60,7 @@
5960
<dependencies>
6061
<required>
6162
<php>
62-
<min>7.0.0</min>
63+
<min>8.0.0</min>
6364
</php>
6465
<pearinstaller>
6566
<min>1.4.0b1</min>

php_geospatial.stub.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
/** @generate-function-entries */
3+
4+
/**
5+
* @var float
6+
* @cvalue GEO_EARTH_RADIUS
7+
*/
8+
const GEO_EARTH_RADIUS = UNKNOWN;
9+
10+
/**
11+
* @var float
12+
* @cvalue GEO_WGS84
13+
*/
14+
const GEO_WGS84 = UNKNOWN;
15+
16+
/**
17+
* @var int
18+
* @cvalue GEO_AIRY_1830
19+
*/
20+
const GEO_AIRY_1830 = UNKNOWN;
21+
22+
/**
23+
* @var int
24+
* @cvalue GEO_WGS84
25+
*/
26+
const GEO_WGS84 = UNKNOWN;
27+
28+
29+
function dms_to_decimal(float $degrees, float $minutes, float $seconds, string $direction = ""): float {}
30+
function decimal_to_dms(float $decimal, string $coordinate): array {}
31+
32+
function helmert(float $x, float $y, float $z, int $from_reference_ellipsoid = 0, int $to_reference_ellipsoid = 0): array {}
33+
function polar_to_cartesian(float $latitude, float $longitude, int $reference_ellipsoid = 0): array {}
34+
function cartesian_to_polar(float $x, float $y, float $z, int $reference_ellipsoid = 0): array {}
35+
function transform_datum(array $coordinates, int $from_reference_ellipsoid, int $to_reference_ellipsoid): array {}
36+
37+
function haversine(array $from, array $to, float $radius = GEO_EARTH_RADIUS): float {}
38+
function vincenty(array $from, array $to, float $reference_ellipsoid = GEO_WGS84): float {}
39+
40+
function fraction_along_gc_line(array $from, array $to, float $fraction): array {}
41+
function initial_bearing(array $from, array $to): float {}
42+
43+
function rdp_simplify(array $points, float $epsilon): array {}
44+
45+
function interpolate_linestring(array $line, float $epsilon): array {}
46+
function interpolate_polygon(array $polygon, float $epsilon): array {}
47+
48+
function geohash_encode(array $point, int $precision = 12): string {}
49+
function geohash_decode(string $geohash): array {}

php_geospatial_arginfo.h

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/* This is a generated file, edit the .stub.php file instead.
2+
* Stub hash: e128dccdbd9aa407d95c5b62e8000cb12d0bffa3 */
3+
4+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dms_to_decimal, 0, 3, IS_DOUBLE, 0)
5+
ZEND_ARG_TYPE_INFO(0, degrees, IS_DOUBLE, 0)
6+
ZEND_ARG_TYPE_INFO(0, minutes, IS_DOUBLE, 0)
7+
ZEND_ARG_TYPE_INFO(0, seconds, IS_DOUBLE, 0)
8+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, direction, IS_STRING, 0, "\"\"")
9+
ZEND_END_ARG_INFO()
10+
11+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_decimal_to_dms, 0, 2, IS_ARRAY, 0)
12+
ZEND_ARG_TYPE_INFO(0, decimal, IS_DOUBLE, 0)
13+
ZEND_ARG_TYPE_INFO(0, coordinate, IS_STRING, 0)
14+
ZEND_END_ARG_INFO()
15+
16+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_helmert, 0, 3, IS_ARRAY, 0)
17+
ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0)
18+
ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0)
19+
ZEND_ARG_TYPE_INFO(0, z, IS_DOUBLE, 0)
20+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, from_reference_ellipsoid, IS_LONG, 0, "0")
21+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, to_reference_ellipsoid, IS_LONG, 0, "0")
22+
ZEND_END_ARG_INFO()
23+
24+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_polar_to_cartesian, 0, 2, IS_ARRAY, 0)
25+
ZEND_ARG_TYPE_INFO(0, latitude, IS_DOUBLE, 0)
26+
ZEND_ARG_TYPE_INFO(0, longitude, IS_DOUBLE, 0)
27+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, reference_ellipsoid, IS_LONG, 0, "0")
28+
ZEND_END_ARG_INFO()
29+
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_cartesian_to_polar, 0, 3, IS_ARRAY, 0)
31+
ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0)
32+
ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0)
33+
ZEND_ARG_TYPE_INFO(0, z, IS_DOUBLE, 0)
34+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, reference_ellipsoid, IS_LONG, 0, "0")
35+
ZEND_END_ARG_INFO()
36+
37+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_transform_datum, 0, 3, IS_ARRAY, 0)
38+
ZEND_ARG_TYPE_INFO(0, coordinates, IS_ARRAY, 0)
39+
ZEND_ARG_TYPE_INFO(0, from_reference_ellipsoid, IS_LONG, 0)
40+
ZEND_ARG_TYPE_INFO(0, to_reference_ellipsoid, IS_LONG, 0)
41+
ZEND_END_ARG_INFO()
42+
43+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_haversine, 0, 2, IS_DOUBLE, 0)
44+
ZEND_ARG_TYPE_INFO(0, from, IS_ARRAY, 0)
45+
ZEND_ARG_TYPE_INFO(0, to, IS_ARRAY, 0)
46+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, radius, IS_DOUBLE, 0, "GEO_EARTH_RADIUS")
47+
ZEND_END_ARG_INFO()
48+
49+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_vincenty, 0, 2, IS_DOUBLE, 0)
50+
ZEND_ARG_TYPE_INFO(0, from, IS_ARRAY, 0)
51+
ZEND_ARG_TYPE_INFO(0, to, IS_ARRAY, 0)
52+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, reference_ellipsoid, IS_DOUBLE, 0, "GEO_WGS84")
53+
ZEND_END_ARG_INFO()
54+
55+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fraction_along_gc_line, 0, 3, IS_ARRAY, 0)
56+
ZEND_ARG_TYPE_INFO(0, from, IS_ARRAY, 0)
57+
ZEND_ARG_TYPE_INFO(0, to, IS_ARRAY, 0)
58+
ZEND_ARG_TYPE_INFO(0, fraction, IS_DOUBLE, 0)
59+
ZEND_END_ARG_INFO()
60+
61+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_initial_bearing, 0, 2, IS_DOUBLE, 0)
62+
ZEND_ARG_TYPE_INFO(0, from, IS_ARRAY, 0)
63+
ZEND_ARG_TYPE_INFO(0, to, IS_ARRAY, 0)
64+
ZEND_END_ARG_INFO()
65+
66+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rdp_simplify, 0, 2, IS_ARRAY, 0)
67+
ZEND_ARG_TYPE_INFO(0, points, IS_ARRAY, 0)
68+
ZEND_ARG_TYPE_INFO(0, epsilon, IS_DOUBLE, 0)
69+
ZEND_END_ARG_INFO()
70+
71+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_interpolate_linestring, 0, 2, IS_ARRAY, 0)
72+
ZEND_ARG_TYPE_INFO(0, line, IS_ARRAY, 0)
73+
ZEND_ARG_TYPE_INFO(0, epsilon, IS_DOUBLE, 0)
74+
ZEND_END_ARG_INFO()
75+
76+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_interpolate_polygon, 0, 2, IS_ARRAY, 0)
77+
ZEND_ARG_TYPE_INFO(0, polygon, IS_ARRAY, 0)
78+
ZEND_ARG_TYPE_INFO(0, epsilon, IS_DOUBLE, 0)
79+
ZEND_END_ARG_INFO()
80+
81+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_geohash_encode, 0, 1, IS_STRING, 0)
82+
ZEND_ARG_TYPE_INFO(0, point, IS_ARRAY, 0)
83+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, precision, IS_LONG, 0, "12")
84+
ZEND_END_ARG_INFO()
85+
86+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_geohash_decode, 0, 1, IS_ARRAY, 0)
87+
ZEND_ARG_TYPE_INFO(0, geohash, IS_STRING, 0)
88+
ZEND_END_ARG_INFO()
89+
90+
91+
ZEND_FUNCTION(dms_to_decimal);
92+
ZEND_FUNCTION(decimal_to_dms);
93+
ZEND_FUNCTION(helmert);
94+
ZEND_FUNCTION(polar_to_cartesian);
95+
ZEND_FUNCTION(cartesian_to_polar);
96+
ZEND_FUNCTION(transform_datum);
97+
ZEND_FUNCTION(haversine);
98+
ZEND_FUNCTION(vincenty);
99+
ZEND_FUNCTION(fraction_along_gc_line);
100+
ZEND_FUNCTION(initial_bearing);
101+
ZEND_FUNCTION(rdp_simplify);
102+
ZEND_FUNCTION(interpolate_linestring);
103+
ZEND_FUNCTION(interpolate_polygon);
104+
ZEND_FUNCTION(geohash_encode);
105+
ZEND_FUNCTION(geohash_decode);
106+
107+
108+
static const zend_function_entry ext_functions[] = {
109+
ZEND_FE(dms_to_decimal, arginfo_dms_to_decimal)
110+
ZEND_FE(decimal_to_dms, arginfo_decimal_to_dms)
111+
ZEND_FE(helmert, arginfo_helmert)
112+
ZEND_FE(polar_to_cartesian, arginfo_polar_to_cartesian)
113+
ZEND_FE(cartesian_to_polar, arginfo_cartesian_to_polar)
114+
ZEND_FE(transform_datum, arginfo_transform_datum)
115+
ZEND_FE(haversine, arginfo_haversine)
116+
ZEND_FE(vincenty, arginfo_vincenty)
117+
ZEND_FE(fraction_along_gc_line, arginfo_fraction_along_gc_line)
118+
ZEND_FE(initial_bearing, arginfo_initial_bearing)
119+
ZEND_FE(rdp_simplify, arginfo_rdp_simplify)
120+
ZEND_FE(interpolate_linestring, arginfo_interpolate_linestring)
121+
ZEND_FE(interpolate_polygon, arginfo_interpolate_polygon)
122+
ZEND_FE(geohash_encode, arginfo_geohash_encode)
123+
ZEND_FE(geohash_decode, arginfo_geohash_decode)
124+
ZEND_FE_END
125+
};

0 commit comments

Comments
 (0)