librtree 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/ext/rtree/lib/bindex.c +16 -0
- data/ext/rtree/lib/error.c +1 -1
- data/ext/rtree/lib/mk/Hdr.mk +9 -3
- data/ext/rtree/lib/package.c +1 -1
- data/ext/rtree/lib/postscript.c +1 -0
- data/ext/rtree/rtree.c +9 -10
- data/lib/rtree.rb +62 -37
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b945bd1abd981557382119ef56ebde1c6bd1f3e75dfa0ca4656b43a59c99d833
|
4
|
+
data.tar.gz: 9af9d2d1317582970d0b27fd43c2947472d66be2383f29bdb7f3d8d19743a897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 752765087a236c6ae456475af539ffafb72f02ba13521ff75c094e997c367b717f6d3166e97146a9bc45f2b58581ec6b292aea1faaababf18e6f57d2b8cbc705
|
7
|
+
data.tar.gz: 6aa633e4d38ca15f6a4dc6392870cb0ec8d3713bb15b53a9142b06a00a8e7d295eb5a5f57494eb72cdfdf2b9f8098b86e4703f310a9b3382b39d47df971f29d0
|
data/CHANGELOG.md
CHANGED
data/ext/rtree/lib/bindex.c
CHANGED
@@ -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)
|
data/ext/rtree/lib/error.c
CHANGED
@@ -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
|
-
{
|
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" },
|
data/ext/rtree/lib/mk/Hdr.mk
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
-
HDR := rtree
|
2
|
-
rtree/
|
3
|
-
rtree/
|
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
|
data/ext/rtree/lib/package.c
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
#include "rtree/package.h"
|
7
7
|
|
8
|
-
const char rtree_package_version[] = "1.3.
|
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";
|
data/ext/rtree/lib/postscript.c
CHANGED
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(
|
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(
|
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
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
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
|
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
|
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
|
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(
|
149
|
-
|
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
|
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
|
167
|
-
# rtree =
|
185
|
+
# @example Read from path
|
186
|
+
# rtree = RTree.bsrt_read('rtree.bsrt')
|
168
187
|
#
|
169
|
-
def bsrt_read(
|
170
|
-
|
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
|
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(
|
216
|
+
def csv_read(io_arg, dim, split: :quadratic, node_page: 0)
|
196
217
|
flags = split_flag(split) | node_page_flag(node_page)
|
197
|
-
|
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
|
367
|
-
# @param
|
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
|
-
#
|
394
|
+
# rtree.json_write('rtree.json')
|
372
395
|
#
|
373
|
-
def json_write(
|
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)
|
378
|
-
# @param
|
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
|
-
#
|
406
|
+
# rtree.bsrt_write('rtree.bsrt')
|
383
407
|
#
|
384
|
-
def bsrt_write(
|
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
|
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(
|
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
|
-
|
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.
|
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
|
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 =
|
540
|
-
# RTree::Style.json_read(io)
|
541
|
-
# end
|
566
|
+
# style = RTree::Style.json_read('some.style')
|
542
567
|
#
|
543
|
-
def json_read(
|
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
|
+
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:
|
11
|
+
date: 2024-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|