librtree 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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