librtree 0.8.9 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rtree.rb +80 -68
  3. metadata +13 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d796bcdad6e023f99009363c9c11a10d8c6dfc7b9c797b487925fa319ace78b9
4
- data.tar.gz: 83d563781db1c1e1b6bd8b8790cbb68fbbd9a7f997dd49840ff8cba7bfcac3e8
3
+ metadata.gz: 91ab938275be940bbe12869b5b95266bdd32a503c5aae74ef84e242db8b65cd2
4
+ data.tar.gz: 981f9d121d65cb94f3ca42cd09c3841471d9c9c6c4176416d8de639f2ffe9922
5
5
  SHA512:
6
- metadata.gz: e1a6c56ad9c14ae15c8ed047e980262477f36b672bb08c5cc584eff7b2fba3b20845e8671ee166f8929abbb5a7d11e596cca36da6d89a67cef167773ada20577
7
- data.tar.gz: b699d85386e8ea991eb2d4e4816635b6a0d550e2dbeb36b670526186d0b72f72f8cf763d22ba6339fe595dc3f70c7d6f9e9bfa5714216ec125e0b1748c146d97
6
+ metadata.gz: 42764d0851e8ddab67468847fc08f8d148ad332a7b8e3d81f26a2eb50d8a79b0e2ac2cfb6e805c7f3d1bd2b17a5ed1bd52c89ed0001c88fb3c9c209fb879fe0f
7
+ data.tar.gz: a394efa120788677dbda6d409b07e1a1d6d234692f08ba6371dfbc99c0f82420e2f720214793c6944f0b652cc81739096b06ff5e8822ac5f18d8a0b3f70388ba
data/lib/rtree.rb CHANGED
@@ -1,8 +1,10 @@
1
- # The internal Ruby/C interface for RTree, not documented in YARD.
1
+ # frozen_string_literal: true
2
+
3
+ # @!visibility private
2
4
  #
3
5
  class RTreeBase ; end
4
6
 
5
- # The internal Ruby/C interface for RTree::Style, not documented in YARD.
7
+ # @!visibility private
6
8
  #
7
9
  class RTreeStyleBase ; end
8
10
 
@@ -62,25 +64,78 @@ require 'fcntl'
62
64
  #
63
65
  class RTree < RTreeBase
64
66
 
67
+ # @!visibility private
68
+ #
65
69
  module IOUtil
70
+ extend self
71
+
72
+ # @!visibility private
73
+ #
74
+ def deserialise(string, encoding)
75
+ raise TypeError unless string.is_a? String
76
+ rd, wr = IO.pipe(encoding)
77
+ if fork then
78
+ wr.close
79
+ unset_nonblock(rd)
80
+ begin
81
+ result = yield(rd)
82
+ ensure
83
+ rd.close
84
+ Process.wait
85
+ end
86
+ else
87
+ rd.close
88
+ begin
89
+ wr.write(string)
90
+ ensure
91
+ wr.close
92
+ exit!
93
+ end
94
+ end
95
+ result
96
+ end
97
+
98
+ # @!visibility private
99
+ #
100
+ def serialise(encoding)
101
+ rd, wr = IO.pipe(encoding)
102
+ if fork then
103
+ wr.close
104
+ unset_nonblock(rd)
105
+ begin
106
+ result = rd.read
107
+ ensure
108
+ rd.close
109
+ Process.wait
110
+ end
111
+ else
112
+ rd.close
113
+ begin
114
+ yield(wr)
115
+ ensure
116
+ wr.close
117
+ exit!
118
+ end
119
+ end
120
+ result
121
+ end
66
122
 
67
123
  private
68
124
 
69
125
  # In Ruby 3, the Fibres facility exploits non-blocking IO and so pipes
70
126
  # are non-blocking by default, this buggers-up the deserialise method
71
127
  # since there is short delay forking here -- so we reinstate blocking
72
- # with some fairly low-level fcntl)2) magick.
128
+ # with some fairly low-level fcntl(2) magic.
73
129
 
74
130
  def unset_nonblock(fd)
75
- flags0 = fd.fcntl(Fcntl::F_GETFL, 0)
76
- flags1 = flags0 & ~Fcntl::O_NONBLOCK
77
- fd.fcntl(Fcntl::F_SETFL, flags1)
131
+ fd.fcntl(
132
+ Fcntl::F_SETFL,
133
+ fd.fcntl(Fcntl::F_GETFL, 0) & ~Fcntl::O_NONBLOCK
134
+ )
78
135
  end
79
136
 
80
137
  end
81
138
 
82
- extend IOUtil
83
-
84
139
  class << self
85
140
 
86
141
  # Create a new RTree instance from JSON stream
@@ -201,29 +256,10 @@ class RTree < RTreeBase
201
256
 
202
257
  private
203
258
 
204
- def deserialise(string, encoding)
205
- raise TypeError unless string.is_a? String
206
- rd, wr = IO.pipe(encoding)
207
- unset_nonblock(rd)
208
- if fork then
209
- wr.close
210
- begin
211
- result = yield(rd)
212
- ensure
213
- rd.close
214
- Process.wait
215
- end
216
- else
217
- rd.close
218
- begin
219
- wr.write(string)
220
- ensure
221
- wr.close
222
- exit!
223
- end
224
- end
225
- result
259
+ def deserialise(*args, &block)
260
+ RTree::IOUtil.deserialise(*args, &block)
226
261
  end
262
+
227
263
  end
228
264
 
229
265
  # Initialize a new (empty) RTree
@@ -319,7 +355,7 @@ class RTree < RTreeBase
319
355
  # @return [Boolean] true if the RTree is empty
320
356
  #
321
357
  def empty?
322
- height == 0
358
+ height.zero?
323
359
  end
324
360
 
325
361
  # Serialise to JSON stream
@@ -434,6 +470,7 @@ class RTree < RTreeBase
434
470
  end
435
471
 
436
472
  # Create a PostScript plot of the RTree
473
+ #
437
474
  # @param io [IO] a writeable stream object
438
475
  # @param style [RTree::Style] a style object describing the fill
439
476
  # colour and stroke width and colour for each level of the tree.
@@ -445,6 +482,8 @@ class RTree < RTreeBase
445
482
  # @param margin [Float] extra space around the plot in units of
446
483
  # PostScript point (1/72 inch), default zero
447
484
  #
485
+ # rdoc-image:img/cb-bupu3.png
486
+ #
448
487
  def postscript(io, style, height: nil, width: nil, margin: 0)
449
488
  if height && width then
450
489
  raise ArgumentError, 'cannot specify both height and width'
@@ -475,21 +514,10 @@ class RTree < RTreeBase
475
514
  node_page_flag | split_flag
476
515
  end
477
516
 
478
- def serialise(encoding)
479
- rd, wr = IO.pipe(encoding)
480
- if fork then
481
- wr.close
482
- result = rd.read
483
- rd.close
484
- Process.wait
485
- else
486
- rd.close
487
- yield(wr)
488
- wr.close
489
- exit!
490
- end
491
- result
517
+ def serialise(*args, &block)
518
+ RTree::IOUtil.serialise(*args, &block)
492
519
  end
520
+
493
521
  end
494
522
 
495
523
  # @author RTree::Style J. J. Green
@@ -499,8 +527,6 @@ end
499
527
  #
500
528
  class RTree::Style < RTreeStyleBase
501
529
 
502
- extend RTree::IOUtil
503
-
504
530
  class << self
505
531
 
506
532
  # Create a new Style instance from JSON stream
@@ -521,27 +547,7 @@ class RTree::Style < RTreeStyleBase
521
547
  # @see .json_read
522
548
  #
523
549
  def from_json(json)
524
- raise TypeError unless json.is_a? String
525
- rd, wr = IO.pipe(Encoding::UTF_8)
526
- unset_nonblock(rd)
527
- if fork then
528
- wr.close
529
- begin
530
- result = json_read(rd)
531
- ensure
532
- rd.close
533
- Process.wait
534
- end
535
- else
536
- rd.close
537
- begin
538
- wr.write(json)
539
- ensure
540
- wr.close
541
- exit!
542
- end
543
- end
544
- result
550
+ deserialise(json, Encoding::UTF_8) { |io| json_read(io) }
545
551
  end
546
552
 
547
553
  # Create a new Style instance from array of Hash
@@ -570,5 +576,11 @@ class RTree::Style < RTreeStyleBase
570
576
 
571
577
  alias_method :from_array, :from_a
572
578
 
579
+ private
580
+
581
+ def deserialise(*args, &block)
582
+ RTree::IOUtil.deserialise(*args, &block)
583
+ end
584
+
573
585
  end
574
586
  end
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: 0.8.9
4
+ version: 0.9.0
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: 2021-08-24 00:00:00.000000000 Z
11
+ date: 2021-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.6'
47
+ version: '3.10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.6'
54
+ version: '3.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,30 +70,30 @@ dependencies:
70
70
  name: rubygems-tasks
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "<="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.2.4
75
+ version: '0.2'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "<="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.2.4
82
+ version: '0.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake-compiler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1'
89
+ version: '1.1'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1'
96
+ version: '1.1'
97
97
  description: |
98
98
  A Ruby extension implementing the R-tree spatial-index of
99
99
  Guttman-Green.
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  requirements:
129
129
  - The librtree library (1.0.6 or later)
130
- rubygems_version: 3.2.3
130
+ rubygems_version: 3.1.2
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: R-tree spatial index