librtree 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4cc8665ba0560f3258c4857556efa67195cc699915adc9d2297a78d0f41c3cc
4
- data.tar.gz: 1b20b6f067a37c4f3265c9f9d7084d4736a8367aa05613e075a4589ba1dc0259
3
+ metadata.gz: 7dbcdf3078b84e506da1a5afb4e0f31db7490ef8b57860c3d670dae5422bb283
4
+ data.tar.gz: 9c63a1227bbf656f12360acda82a0f7a7c369d27a25ae1352c906af769f5c2d3
5
5
  SHA512:
6
- metadata.gz: c0ae30faf7cba617f9ab96be3d9ec5325505a9b97b9591fc64bcbd8e2de327def4bca47386992c80f6c1d6021211cdd660ca10cfa1ed8f75d82b67cc6a33f1a0
7
- data.tar.gz: d561ecb375d69cb78a1f2681c43e430692c4f191bc9555cd317e8b0b76d726740154aa2befb6bdc9f35aa56adf0686c5030593ac81fff9fc3ce167ecdd9eeef4
6
+ metadata.gz: 6c54dae2e5b2e4601c6730fd7e3d50e7f87c5af3a067b7b9c2167c8f43c8c43d52429f7db18db17116cfc958f54587b7009ee92a69d59843048ca53b6b422878
7
+ data.tar.gz: 1c9aa746ba96bd5413add8a1629a2c84da513e0ed5467d553a10dcfe6f2c776b15d9dd45afac3ff2a33b6cef40633bc7937bffceb0f877c7c03f30ac34bdd8eb
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  Changelog
2
2
  ---------
3
3
 
4
+ ### 1.0.1, 16-03-2023
5
+
6
+ - Update to 1.1.4 of embedded `librtree`
7
+ - The `#empty?` method uses faster `rtree_empty` of the latest
8
+ version of the embedded library
9
+ - Added the `simplecov` gem and configured (Ruby) coverage in
10
+ CI runs
11
+
4
12
  ### 1.0.0, 24-02-2023
5
13
 
6
14
  - The `librtree` library is no longer a requirement: the code
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  librtree-ruby
2
2
  -------------
3
3
 
4
- A Ruby native extension for [librtree][3] implementing the R-tree
5
- spatial index of Guttman-Green.
4
+ A Ruby native extension implementing the R-tree spatial index of
5
+ Guttman-Green. The code is an embedded version of [librtree][3].
6
6
 
7
7
 
8
8
  ### Installing dependencies
@@ -47,12 +47,12 @@ will import the **RTree** class, its usage is described [here][5].
47
47
  This is only needed if you want work on the extension, not for
48
48
  a Gem install.
49
49
 
50
- First install the dependencies and [librtree][3] as above. Then
51
- clone the repository and install the extension's Ruby dependencies,
52
- there are several ways to do this.
50
+ First install the dependencies as above. Then clone the repository and
51
+ install the extension's Ruby dependencies, there are several ways to do
52
+ this.
53
53
 
54
- If using [rbenv][4], then first set a local version of Ruby to
55
- use, then install the gems into your local cache
54
+ If using [rbenv][4], then first set a local version of Ruby to use,
55
+ then install the gems into your local cache
56
56
 
57
57
  rbenv local 2.7.0
58
58
  bundle install
@@ -80,6 +80,7 @@ run the tests:
80
80
  bundle exec rake compile
81
81
  bundle exec rake spec
82
82
 
83
+
83
84
  [1]: http://www.digip.org/jansson/
84
85
  [3]: http://soliton.vm.bytemark.co.uk/pub/jjg/en/code/librtree/
85
86
  [4]: https://github.com/rbenv/rbenv
@@ -0,0 +1,9 @@
1
+ Embedded librtree
2
+ -----------------
3
+
4
+ The code in this directory is largely generated by the script
5
+ `bin/librtee-update`, one should not edit it directly, instead
6
+ make a clone of the [librtree][1] project, modify that and use
7
+ the update-script to copy the results here.
8
+
9
+ [1]: https://gitlab.com/jjg/librtree
data/ext/rtree/lib/node.c CHANGED
@@ -700,6 +700,34 @@ bool node_identical(const state_t *state, const node_t *a, const node_t *b)
700
700
  return ! (a || b);
701
701
  }
702
702
 
703
+ /*
704
+ find whether the node or its descendants have a leaf, so we're
705
+ looking for a level-zero node with a non-zero count, of course
706
+ we short circuit as soon as we find one.
707
+ */
708
+
709
+ bool node_nonempty(const state_t *state, const node_t *node)
710
+ {
711
+ node_count_t count;
712
+
713
+ if ((count = node_count(node)) == 0)
714
+ return false;
715
+
716
+ if (node_level(node) == 0)
717
+ return true;
718
+
719
+ for (size_t i = 0 ; i < count ; i++)
720
+ {
721
+ const branch_t *branch = node_get_branch(state, node, i);
722
+ const node_t *child = branch_get_child(branch);
723
+
724
+ if (node_nonempty(state, child))
725
+ return true;
726
+ }
727
+
728
+ return false;
729
+ }
730
+
703
731
  extern node_count_t node_count(const node_t*);
704
732
  extern void node_count_increment(node_t*);
705
733
  extern void node_count_decrement(node_t*);
@@ -5,7 +5,7 @@
5
5
 
6
6
  #include "rtree/package.h"
7
7
 
8
- const char *rtree_package_version = "1.1.3";
9
- const char *rtree_package_name = "librtree";
10
- const char *rtree_package_url = "https://gitlab.com/jjg/librtree";
11
- const char *rtree_package_bugreport = "j.j.green@gmx.co.uk";
8
+ const char rtree_package_version[] = "1.1.4";
9
+ const char rtree_package_name[] = "librtree";
10
+ const char rtree_package_url[] = "https://gitlab.com/jjg/librtree";
11
+ const char rtree_package_bugreport[] = "j.j.green@gmx.co.uk";
@@ -8,6 +8,9 @@
8
8
 
9
9
  #ifdef __cplusplus
10
10
  extern "C" {
11
+ #if 0
12
+ }
13
+ #endif
11
14
  #endif
12
15
 
13
16
  #include <stdint.h>
@@ -54,6 +57,7 @@ int node_update(const state_t*, const node_t*, rtree_update_t*, void*);
54
57
  bool node_identical(const state_t*, const node_t*, const node_t*);
55
58
  node_height_t node_height(const state_t*, const node_t*);
56
59
  size_t node_bytes(const state_t*, const node_t*);
60
+ bool node_nonempty(const state_t*, const node_t*);
57
61
 
58
62
  inline node_count_t node_count(const node_t *node)
59
63
  {
@@ -6,9 +6,9 @@
6
6
  #ifndef RTREE_PACKAGE_H
7
7
  #define RTREE_PACKAGE_H
8
8
 
9
- extern const char *rtree_package_version;
10
- extern const char *rtree_package_name;
11
- extern const char *rtree_package_url;
12
- extern const char *rtree_package_bugreport;
9
+ extern const char rtree_package_version[];
10
+ extern const char rtree_package_name[];
11
+ extern const char rtree_package_url[];
12
+ extern const char rtree_package_bugreport[];
13
13
 
14
14
  #endif
@@ -188,3 +188,10 @@ size_t rtree_bytes(const rtree_t *rtree)
188
188
  state_bytes(rtree->state) +
189
189
  node_bytes(rtree->state, rtree->root);
190
190
  }
191
+
192
+ bool rtree_empty(const rtree_t *rtree)
193
+ {
194
+ return
195
+ (rtree == NULL) ||
196
+ (! node_nonempty(rtree->state, rtree->root));
197
+ }
@@ -53,6 +53,7 @@ rtree_t* rtree_bsrt_read(FILE*);
53
53
  int rtree_postscript(const rtree_t*, const rtree_postscript_t*, FILE*);
54
54
  const char* rtree_strerror(int);
55
55
  size_t rtree_bytes(const rtree_t*);
56
+ bool rtree_empty(const rtree_t*);
56
57
 
57
58
  #ifdef __cplusplus
58
59
  }
data/ext/rtree/rtree.c CHANGED
@@ -55,6 +55,16 @@ static VALUE rt_release(VALUE self)
55
55
  return self;
56
56
  }
57
57
 
58
+ static VALUE rt_empty(VALUE self)
59
+ {
60
+ rtree_t *rtree;
61
+ TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree);
62
+ if (rtree_empty(rtree))
63
+ return Qtrue;
64
+ else
65
+ return Qfalse;
66
+ }
67
+
58
68
  static VALUE rt_height(VALUE self)
59
69
  {
60
70
  rtree_t *rtree;
@@ -505,6 +515,7 @@ void Init_rtree(void)
505
515
  rb_define_method(cRTreeBase, "free", rt_release, 0);
506
516
  rb_define_method(cRTreeBase, "clone", rt_clone, 0);
507
517
  rb_define_method(cRTreeBase, "update!", rt_update, 0);
518
+ rb_define_method(cRTreeBase, "empty?", rt_empty, 0);
508
519
  rb_define_method(cRTreeBase, "height", rt_height, 0);
509
520
  rb_define_method(cRTreeBase, "add_rect", rt_add_rect, 2);
510
521
  rb_define_method(cRTreeBase, "search", rt_search, 1);
data/lib/rtree.rb CHANGED
@@ -14,9 +14,9 @@ require 'fcntl'
14
14
 
15
15
  # @author RTree J. J. Green
16
16
  #
17
- # A Ruby wrapper around
18
- # {http://soliton.vm.bytemark.co.uk/pub/jjg/en/code/librtree librtree}
19
- # implementing the R-tree spatial index of Guttman-Green.
17
+ # A Ruby native extension implementing the R-tree spatial index of
18
+ # Guttman-Green. The code is an emebded version of
19
+ # {http://soliton.vm.bytemark.co.uk/pub/jjg/en/code/librtree librtree}.
20
20
  #
21
21
  # Use
22
22
  #
@@ -355,7 +355,7 @@ class RTree < RTreeBase
355
355
  # @return [Boolean] true if the RTree is empty
356
356
  #
357
357
  def empty?
358
- height.zero?
358
+ super
359
359
  end
360
360
 
361
361
  # Serialise to JSON stream
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: librtree
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - J.J. Green
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-24 00:00:00.000000000 Z
11
+ date: 2023-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.22'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.22'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: yard
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +121,7 @@ files:
107
121
  - COPYING
108
122
  - README.md
109
123
  - ext/rtree/extconf.rb
124
+ - ext/rtree/lib/README.md
110
125
  - ext/rtree/lib/bindex.c
111
126
  - ext/rtree/lib/bindex.h
112
127
  - ext/rtree/lib/bounds.h
@@ -173,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
188
  - !ruby/object:Gem::Version
174
189
  version: '0'
175
190
  requirements:
176
- - The Jannson library
191
+ - The Jansson library
177
192
  rubygems_version: 3.1.6
178
193
  signing_key:
179
194
  specification_version: 4