fast-polylines 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -3
- data/ext/fast_polylines/fast_polylines.c +19 -2
- data/lib/fast_polylines/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ab14d087b6992d7abec3047ad38aea4e7474f4bfff06b921ea91699bd788172
|
4
|
+
data.tar.gz: 4225fc53ff0801e6b145058461d9cf6d5f65be902787a7496e85c83883b52ba5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82f43939d565a422fdf0696539f1c668d851aa88ff36d52a9f3ad2d909ebfe095c1ccd0b7266243943c834f70dc5c954c85715a3c435768df2c6ccce871443b4
|
7
|
+
data.tar.gz: 97ab65e7683ecbb53bf5673532e5ff99399b7f0b97b140221127b302e2d54020c1e3b1b6c174a624c49d276801b0f76089e3378cf5949b7a8fdad64494d89db0
|
data/CHANGELOG.md
CHANGED
@@ -5,17 +5,30 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/).
|
6
6
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
7
7
|
|
8
|
-
|
9
8
|
## [unreleased] —
|
10
9
|
|
11
10
|
### Added
|
12
11
|
|
13
|
-
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
## [2.2.0] — 2020-11-24
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- support for windows (#19 #23) by [@mohits]
|
14
21
|
|
15
22
|
### Changed
|
16
23
|
|
24
|
+
- Speedup calculation by avoiding calling pow(10,x) (#22) by [@mohits]
|
25
|
+
|
17
26
|
### Fixed
|
18
27
|
|
28
|
+
- move from travis to github actions
|
29
|
+
|
30
|
+
[@mohits]: https://github.com/mohits
|
31
|
+
|
19
32
|
## [2.1.0] — 2020-04-30
|
20
33
|
|
21
34
|
### Added
|
@@ -29,6 +42,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
29
42
|
- Broken behavior when approaching the chunk size limit (#16)
|
30
43
|
|
31
44
|
|
32
|
-
[unreleased]: https://github.com/klaxit/fast-polylines/compare/v2.
|
45
|
+
[unreleased]: https://github.com/klaxit/fast-polylines/compare/v2.2.0...HEAD
|
46
|
+
[2.2.0]: https://github.com/klaxit/fast-polylines/compare/v2.1.0...v2.2.0
|
33
47
|
[2.1.0]: https://github.com/klaxit/fast-polylines/compare/v2.0.1...v2.1.0
|
34
48
|
[2.0.1]: https://github.com/klaxit/fast-polylines/compare/v2.0.0...v2.0.1
|
@@ -24,6 +24,21 @@
|
|
24
24
|
#define rdbg(...)
|
25
25
|
#endif
|
26
26
|
|
27
|
+
typedef unsigned int uint;
|
28
|
+
|
29
|
+
// Speed up the code a bit by not calling pow(10.0, precision) since it is
|
30
|
+
// always 10^precision. Convert that into a lookup instead of doing the
|
31
|
+
// calculation.
|
32
|
+
// The precision parameter is already checked in +_get_precision()+ to ensure
|
33
|
+
// that it is within the range.
|
34
|
+
static inline double _fast_pow10(uint precision) {
|
35
|
+
const double lookup[MAX_PRECISION + 1] = {
|
36
|
+
1.0, 10.0, 1.0e+2, 1.0e+3, 1.0e+4, 1.0e+5, 1.0e+6, 1.0e+7,
|
37
|
+
1.0e+8, 1.0e+9, 1.0e+10, 1.0e+11, 1.0e+12, 1.0e+13
|
38
|
+
};
|
39
|
+
return lookup[precision];
|
40
|
+
}
|
41
|
+
|
27
42
|
static inline uint _get_precision(VALUE value) {
|
28
43
|
int precision = NIL_P(value) ? DEFAULT_PRECISION : NUM2INT(value);
|
29
44
|
if (precision > MAX_PRECISION) rb_raise(rb_eArgError, "precision too high (https://xkcd.com/2170/)");
|
@@ -37,7 +52,8 @@ rb_FastPolylines__decode(int argc, VALUE *argv, VALUE self) {
|
|
37
52
|
Check_Type(argv[0], T_STRING);
|
38
53
|
char* polyline = StringValueCStr(argv[0]);
|
39
54
|
uint precision = _get_precision(argc > 1 ? argv[1] : Qnil);
|
40
|
-
double precision_value =
|
55
|
+
double precision_value = _fast_pow10(precision);
|
56
|
+
|
41
57
|
VALUE ary = rb_ary_new();
|
42
58
|
// Helps keeping track of whether we are computing lat (0) or lng (1).
|
43
59
|
uint8_t index = 0;
|
@@ -98,7 +114,8 @@ rb_FastPolylines__encode(int argc, VALUE *argv, VALUE self) {
|
|
98
114
|
uint precision = _get_precision(argc > 1 ? argv[1] : Qnil);
|
99
115
|
dbg("rb_FastPolylines__encode(..., %u)\n", precision);
|
100
116
|
rdbg(argv[0]);
|
101
|
-
double precision_value =
|
117
|
+
double precision_value = _fast_pow10(precision);
|
118
|
+
|
102
119
|
// This is the maximum possible size the polyline may have. This
|
103
120
|
// being **without** null character. To copy it later as a Ruby
|
104
121
|
// string we'll have to use `rb_str_new` with the length.
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast-polylines
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyrille Courtière
|
8
8
|
- Ulysse Buonomo
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-11-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: benchmark-ips
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '3.5'
|
56
|
-
description:
|
56
|
+
description:
|
57
57
|
email:
|
58
58
|
- dev@klaxit.com
|
59
59
|
executables: []
|
@@ -76,7 +76,7 @@ homepage: https://github.com/klaxit/fast-polylines
|
|
76
76
|
licenses:
|
77
77
|
- MIT
|
78
78
|
metadata: {}
|
79
|
-
post_install_message:
|
79
|
+
post_install_message:
|
80
80
|
rdoc_options: []
|
81
81
|
require_paths:
|
82
82
|
- lib
|
@@ -91,8 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
|
-
rubygems_version: 3.1.
|
95
|
-
signing_key:
|
94
|
+
rubygems_version: 3.1.2
|
95
|
+
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: Fast & easy Google polylines
|
98
98
|
test_files:
|