librtree 1.0.4 → 1.0.5

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: 0b253861945be28133a07d5041b080939164dc3725a4b5b458319899d1ad9b66
4
- data.tar.gz: 56704611278f67678693ce56e4cec85ae436ba41d534803e0fb8694c39d5b45b
3
+ metadata.gz: b945bd1abd981557382119ef56ebde1c6bd1f3e75dfa0ca4656b43a59c99d833
4
+ data.tar.gz: 9af9d2d1317582970d0b27fd43c2947472d66be2383f29bdb7f3d8d19743a897
5
5
  SHA512:
6
- metadata.gz: 904eacdcbbe518f91ccc41d2c03da9191591a0af6e17be87874be1d74525707a10815e68ed0c9c3dacf91afe70384f982723487f3b6434241ec51097745f0f3e
7
- data.tar.gz: 8be9c36a56b92d1bea25a2ef352cb1e3062b1d197983c92cd11d0f753451573b454b3af22327c05fa300d52f3036561555bd1464faa79ea304d87811ddd4acd2
6
+ metadata.gz: 752765087a236c6ae456475af539ffafb72f02ba13521ff75c094e997c367b717f6d3166e97146a9bc45f2b58581ec6b292aea1faaababf18e6f57d2b8cbc705
7
+ data.tar.gz: 6aa633e4d38ca15f6a4dc6392870cb0ec8d3713bb15b53a9142b06a00a8e7d295eb5a5f57494eb72cdfdf2b9f8098b86e4703f310a9b3382b39d47df971f29d0
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  Changelog
2
2
  ---------
3
3
 
4
+ ### 1.0.5, 16-01-2024
5
+
6
+ - All methods which take a `File` object (i.e., a stream), now
7
+ also accept a `String` or `Pathname` to the file instead.
8
+
4
9
  ### 1.0.4, 30-10-2023
5
10
 
6
11
  - Check for `__builtin_ctzl` (and use if found)
@@ -20,6 +20,22 @@
20
20
  #define UL_BYTES sizeof(unsigned long)
21
21
  #define UL_BITS (UL_BYTES << 3)
22
22
 
23
+ /*
24
+ config.h may contain HAVE___BUILTIN_CTZL defined from an autoconf
25
+ check (for the standalone C library, there will be such a check),
26
+ but in the embedded case, performing that check may be tricky, so
27
+ in that case we fall-back onto the __has_builtin macro which has
28
+ been present in clang for many years, and in gcc since version 10.
29
+ */
30
+
31
+ #ifndef HAVE___BUILTIN_CTZL
32
+ #ifdef __has_builtin
33
+ #if __has_builtin(__builtin_ctzl)
34
+ #define HAVE___BUILTIN_CTZL 1
35
+ #endif
36
+ #endif
37
+ #endif
38
+
23
39
  /* see note on branch_sizeof in branch.c */
24
40
 
25
41
  static size_t bindex_sizeof(size_t n)
@@ -23,7 +23,7 @@ const char* strerror_rtree(int err)
23
23
  { RTREE_ERR_NOCSV, "Compiled without CSV support" },
24
24
  { RTREE_ERR_JANSSON, "Error from the Jansson library" },
25
25
  { RTREE_ERR_NOJSON, "Compiled without JSON support" },
26
- { RTREE_ERR_NOJSON, "Compiled without BSRT support" },
26
+ { RTREE_ERR_NOBSRT, "Compiled without BSRT support" },
27
27
  { RTREE_ERR_GETBRANCH, "Error getting branch" },
28
28
  { RTREE_ERR_GETCHILD, "Error getting child node" },
29
29
  { RTREE_ERR_NODECLONE, "Error cloning node" },
@@ -1,3 +1,9 @@
1
- HDR := rtree/branch.h rtree/error.h rtree/extent.h rtree/node.h \
2
- rtree/package.h rtree/postscript.h rtree/rectf.h rtree/search.h \
3
- rtree/state.h rtree/types.h rtree.h
1
+ HDR := rtree.h \
2
+ rtree/error.h \
3
+ rtree/extent.h \
4
+ rtree/node.h \
5
+ rtree/package.h \
6
+ rtree/postscript.h \
7
+ rtree/search.h \
8
+ rtree/state.h \
9
+ rtree/types.h
@@ -5,7 +5,7 @@
5
5
 
6
6
  #include "rtree/package.h"
7
7
 
8
- const char rtree_package_version[] = "1.3.0";
8
+ const char rtree_package_version[] = "1.3.1";
9
9
  const char rtree_package_name[] = "librtree";
10
10
  const char rtree_package_url[] = "https://gitlab.com/jjg/librtree";
11
11
  const char rtree_package_bugreport[] = "j.j.green@gmx.co.uk";
@@ -13,6 +13,7 @@
13
13
  #include <time.h>
14
14
  #include <errno.h>
15
15
  #include <stdbool.h>
16
+ #include <stdlib.h>
16
17
 
17
18
  #ifdef HAVE_TGMATH_H
18
19
  #include <tgmath.h>
data/ext/rtree/rtree.c CHANGED
@@ -35,7 +35,7 @@ static VALUE rt_init(VALUE self, VALUE dim_obj, VALUE flags_obj)
35
35
  Check_Type(dim_obj, T_FIXNUM);
36
36
  size_t dim = FIX2ULONG(dim_obj);
37
37
 
38
- Check_Type(dim_obj, T_FIXNUM);
38
+ Check_Type(flags_obj, T_FIXNUM);
39
39
  state_flags_t flags = FIX2UINT(flags_obj);
40
40
 
41
41
  rtree_t *rtree;
@@ -241,7 +241,7 @@ static VALUE rt_csv_read(VALUE cls,
241
241
  Check_Type(dim_obj, T_FIXNUM);
242
242
  size_t dim = FIX2ULONG(dim_obj);
243
243
 
244
- Check_Type(dim_obj, T_FIXNUM);
244
+ Check_Type(flags_obj, T_FIXNUM);
245
245
  state_flags_t flags = FIX2UINT(flags_obj);
246
246
 
247
247
  rtree_t *rtree;
@@ -415,14 +415,13 @@ static VALUE rt_postscript(VALUE self,
415
415
  Check_Type(axis_obj, T_FIXNUM);
416
416
  extent_axis_t axis = FIX2UINT(axis_obj);
417
417
 
418
- rtree_postscript_t opt =
419
- {
420
- .style = style,
421
- .axis = axis,
422
- .extent = extent,
423
- .margin = margin,
424
- .title = "librtree-ruby output"
425
- };
418
+ rtree_postscript_t opt = {
419
+ .style = style,
420
+ .axis = axis,
421
+ .extent = extent,
422
+ .margin = margin,
423
+ .title = "librtree-ruby output"
424
+ };
426
425
 
427
426
  int err;
428
427
  if ((err = rtree_postscript(rtree, &opt, fp)) != 0)
data/lib/rtree.rb CHANGED
@@ -15,7 +15,7 @@ require 'fcntl'
15
15
  # @author RTree J. J. Green
16
16
  #
17
17
  # A Ruby native extension implementing the R-tree spatial index of
18
- # Guttman-Green. The code is an emebded version of
18
+ # Guttman-Green. The code is an embedded version of
19
19
  # {http://soliton.vm.bytemark.co.uk/pub/jjg/en/code/librtree librtree}.
20
20
  #
21
21
  # Use
@@ -69,6 +69,21 @@ class RTree < RTreeBase
69
69
  module IOUtil
70
70
  extend self
71
71
 
72
+ # @!visibility private
73
+ #
74
+ def io_with_mode(arg, mode)
75
+ case arg
76
+ when String, Pathname
77
+ File.open(arg, mode) do |io|
78
+ yield io
79
+ end
80
+ when File, IO
81
+ yield arg
82
+ else
83
+ raise TypeError, arg
84
+ end
85
+ end
86
+
72
87
  # @!visibility private
73
88
  #
74
89
  def deserialise(string, encoding)
@@ -138,15 +153,19 @@ class RTree < RTreeBase
138
153
 
139
154
  class << self
140
155
 
141
- # Create a new RTree instance from JSON stream
142
- # @param io [IO] a readable stream object
156
+ # Create a new RTree instance from JSON path or stream
157
+ # @param io_arg [String|IO] a path or readable stream
143
158
  # @return [RTree] the newly instantiated RTree
144
159
  # @see #json_write
145
- # @example Read from file
160
+ # @example Using a path
161
+ # rtree = RTree.json_read('rtree.json')
162
+ # @example Using a stream
146
163
  # rtree = File.open('rtree.json', 'r') { |io| RTree.json_read(io) }
147
164
  #
148
- def json_read(io)
149
- super
165
+ def json_read(io_arg)
166
+ RTree::IOUtil.io_with_mode(io_arg, 'r') do |io|
167
+ super(io)
168
+ end
150
169
  end
151
170
 
152
171
  # Create a new RTree instance from JSON string
@@ -159,15 +178,17 @@ class RTree < RTreeBase
159
178
  end
160
179
 
161
180
  # Create a new RTree instance from BSRT (binary serialised R-tree)
162
- # stream
163
- # @param io [IO] a readable stream object
181
+ # path or stream
182
+ # @param io_arg [String|IO] a path or readable stream
164
183
  # @return [RTree] the newly instantiated RTree
165
184
  # @see #bsrt_write
166
- # @example Read from file
167
- # rtree = File.open('rtree.bsrt', 'r') { |io| RTree.bsrt_read(io) }
185
+ # @example Read from path
186
+ # rtree = RTree.bsrt_read('rtree.bsrt')
168
187
  #
169
- def bsrt_read(io)
170
- super
188
+ def bsrt_read(io_arg)
189
+ RTree::IOUtil.io_with_mode(io_arg, 'rb') do |io|
190
+ super(io)
191
+ end
171
192
  end
172
193
 
173
194
  # Create a new RTree instance from BSRT (binary serialised R-tree)
@@ -180,8 +201,8 @@ class RTree < RTreeBase
180
201
  deserialise(bsrt, Encoding::BINARY) { |io| bsrt_read(io) }
181
202
  end
182
203
 
183
- # Build a new RTree instance from CSV stream
184
- # @param io [IO] a readable stream object
204
+ # Build a new RTree instance from CSV path or stream
205
+ # @param io_arg [String|IO] a path or readable stream
185
206
  # @param dim [Integer] the dimension of the tree
186
207
  # @param split [:linear, :quadratic, :greene] See {#initialize}
187
208
  # @param node_page [Integer] See {#initialize}
@@ -192,9 +213,11 @@ class RTree < RTreeBase
192
213
  # useful feature is the reason that the dimension is a required
193
214
  # argument).
194
215
  #
195
- def csv_read(io, dim, split: :quadratic, node_page: 0)
216
+ def csv_read(io_arg, dim, split: :quadratic, node_page: 0)
196
217
  flags = split_flag(split) | node_page_flag(node_page)
197
- super(io, dim, flags)
218
+ RTree::IOUtil.io_with_mode(io_arg, 'r') do |io|
219
+ super(io, dim, flags)
220
+ end
198
221
  end
199
222
 
200
223
  # Build a new RTree instance from CSV string
@@ -363,26 +386,28 @@ class RTree < RTreeBase
363
386
  super
364
387
  end
365
388
 
366
- # Serialise to JSON stream
367
- # @param io [IO] a writable stream
389
+ # Serialise to JSON
390
+ # @param io_arg [String|IO] a path or writable stream
368
391
  # @return [self]
369
392
  # @see .json_read
370
393
  # @example Write to file
371
- # File.open('rtree.json', 'w') { |io| rtree.json_write(io) }
394
+ # rtree.json_write('rtree.json')
372
395
  #
373
- def json_write(io)
374
- super
396
+ def json_write(io_arg)
397
+ RTree::IOUtil.io_with_mode(io_arg, 'w') { |io| super(io) }
398
+ self
375
399
  end
376
400
 
377
- # Serialise to BSRT (binary serialised R-tree) stream
378
- # @param io [IO] a writable stream
401
+ # Serialise to BSRT (binary serialised R-tree)
402
+ # @param io_arg [String|IO] a path or writable stream
379
403
  # @return [self]
380
404
  # @see .bsrt_read
381
405
  # @example Write to file
382
- # File.open('rtree.bsrt', 'w') { |io| rtree.bsrt_write(io) }
406
+ # rtree.bsrt_write('rtree.bsrt')
383
407
  #
384
- def bsrt_write(io)
385
- super
408
+ def bsrt_write(io_arg)
409
+ RTree::IOUtil.io_with_mode(io_arg, 'wb') { |io| super(io) }
410
+ self
386
411
  end
387
412
 
388
413
  # Serialise to JSON string
@@ -476,7 +501,7 @@ class RTree < RTreeBase
476
501
 
477
502
  # Create a PostScript plot of the RTree
478
503
  #
479
- # @param io [IO] a writeable stream object
504
+ # @param io_arg [String|IO] a path or writeable stream
480
505
  # @param style [RTree::Style] a style object describing the fill
481
506
  # colour and stroke width and colour for each level of the tree.
482
507
  # @param height [Float] the height of the plot in units of PostScript
@@ -487,7 +512,7 @@ class RTree < RTreeBase
487
512
  # @param margin [Float] extra space around the plot in units of
488
513
  # PostScript point (1/72 inch), default zero
489
514
  #
490
- def postscript(io, style, height: nil, width: nil, margin: 0)
515
+ def postscript(io_arg, style, height: nil, width: nil, margin: 0)
491
516
  if height && width then
492
517
  raise ArgumentError, 'cannot specify both height and width'
493
518
  end
@@ -498,7 +523,9 @@ class RTree < RTreeBase
498
523
  axis = AXIS_WIDTH
499
524
  extent = width || 216
500
525
  end
501
- super(style, axis, extent, margin, io)
526
+ RTree::IOUtil.io_with_mode(io_arg, 'w') do |io|
527
+ super(style, axis, extent, margin, io)
528
+ end
502
529
  end
503
530
 
504
531
  private
@@ -523,7 +550,7 @@ class RTree < RTreeBase
523
550
 
524
551
  end
525
552
 
526
- # @author RTree::Style J. J. Green
553
+ # @author RTree::Style J.J. Green
527
554
  #
528
555
  # A Ruby wrapper around RTree styles, used in PostScript plotting.
529
556
  # in particular by {RTree#postscript}.
@@ -532,16 +559,14 @@ class RTree::Style < RTreeStyleBase
532
559
 
533
560
  class << self
534
561
 
535
- # Create a new Style instance from JSON stream
536
- # @param io [IO] a readable stream object
562
+ # Create a new Style instance from JSON path or stream
563
+ # @param io_arg [String|IO] a path or readable stream
537
564
  # @return [RTree::Style] the newly instantiated Style
538
565
  # @example Read from file
539
- # style = File.open('some.style', 'r') do |io|
540
- # RTree::Style.json_read(io)
541
- # end
566
+ # style = RTree::Style.json_read('some.style')
542
567
  #
543
- def json_read(io)
544
- super
568
+ def json_read(io_arg)
569
+ RTree::IOUtil.io_with_mode(io_arg, 'r') { |io| super(io) }
545
570
  end
546
571
 
547
572
  # Create a new Style instance from JSON string
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.4
4
+ version: 1.0.5
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-10-30 00:00:00.000000000 Z
11
+ date: 2024-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler