librtree 0.8.2 → 0.8.3

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rtree/rtree.c +41 -71
  3. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f559b211be3e93ded31a86b61c68ea28cdea151ef62d0c64a79aa38131fa5a7
4
- data.tar.gz: 7df99f8990a461d60e2276a20891be62c1dc27e6279a2226f2fec6d63d30f5dd
3
+ metadata.gz: a175d9b929078c0a8d94c7adbb7af7eb728acda5a401a99f95504fa30f129470
4
+ data.tar.gz: c5042bd9893f64c112d3940d549fa9dde8503121ced5507ddf2392840950aac0
5
5
  SHA512:
6
- metadata.gz: d6c204e2ba3a7b26fe2ab8ba1148b159a21cc697061d672fa2ccff85924dc56c2a9f19b6241d68e5ec96e3b5f955ffc617ecfc26bc9db94cb0f2190e3178e693
7
- data.tar.gz: c831af24c76a719bfae623a5b525840cf910065426833589d8c04160524e576daf4ad13daf2793387931599187ad80f6bc596aaf21b72334e5230a449cda818d
6
+ metadata.gz: c106ef413a5d28068882ce4c9a24d9d1cb7124b925722915482d59809fdb71b556326e6bca3ebc1fcb9191edb9d799a6233054ae417e9f3c8d3ae5f871057c08
7
+ data.tar.gz: b14066ff0a21bfea29efb91fd52018906358b2ef6eb9ba9337869af62a4be4f2e17b6686f7788fda038b96015630b0b005d0c0a9133899b96e163ac630e49c7d
data/ext/rtree/rtree.c CHANGED
@@ -6,29 +6,20 @@
6
6
  #include <errno.h>
7
7
  #include <stdint.h>
8
8
 
9
- typedef struct
10
- {
11
- rtree_t *rtree;
12
- } lrt_t;
13
-
14
9
  static void lrt_free(void *p)
15
10
  {
16
- lrt_t *lrt = p;
17
-
18
- if (lrt->rtree)
19
- {
20
- rtree_destroy(lrt->rtree);
21
- lrt->rtree = NULL;
22
- }
11
+ rtree_t *rtree = p;
12
+ rtree_destroy(rtree);
23
13
  }
24
14
 
25
15
  static VALUE lrt_alloc(VALUE cls)
26
16
  {
27
- lrt_t *lrt;
28
- VALUE obj = Data_Make_Struct(cls, lrt_t, NULL, lrt_free, lrt);
17
+ rtree_t *rtree;;
29
18
 
30
- lrt->rtree = NULL;
19
+ if ((rtree = rtree_alloc()) == NULL)
20
+ rb_raise(rb_eNoMemError, "failed to alloc rtree");
31
21
 
22
+ VALUE obj = Data_Wrap_Struct(cls, NULL, lrt_free, rtree);
32
23
  return obj;
33
24
  }
34
25
 
@@ -40,31 +31,28 @@ static VALUE lrt_init(VALUE self, VALUE dim_obj, VALUE flags_obj)
40
31
  Check_Type(dim_obj, T_FIXNUM);
41
32
  state_flags_t flags = FIX2UINT(flags_obj);
42
33
 
43
- lrt_t *lrt;
44
- Data_Get_Struct(self, lrt_t, lrt);
34
+ rtree_t *rtree;
35
+ Data_Get_Struct(self, rtree_t, rtree);
45
36
 
46
- if ((lrt->rtree = rtree_new(dim, flags)) == NULL)
47
- rb_raise(rb_eNoMemError, "failed to create rtree");
37
+ if ((rtree_init(rtree, dim, flags)) != 0)
38
+ rb_raise(rb_eNoMemError, "failed to init rtree");
48
39
 
49
40
  return self;
50
41
  }
51
42
 
52
43
  static VALUE lrt_release(VALUE self)
53
44
  {
54
- lrt_t *lrt;
55
- Data_Get_Struct(self, lrt_t, lrt);
56
-
57
- free(lrt->rtree);
58
-
45
+ rtree_t *rtree;
46
+ Data_Get_Struct(self, rtree_t, rtree);
47
+ rtree_destroy(rtree);
59
48
  return self;
60
49
  }
61
50
 
62
51
  static VALUE lrt_height(VALUE self)
63
52
  {
64
- lrt_t *lrt;
65
- Data_Get_Struct(self, lrt_t, lrt);
66
-
67
- return INT2NUM(rtree_height(lrt->rtree));
53
+ rtree_t *rtree;
54
+ Data_Get_Struct(self, rtree_t, rtree);
55
+ return INT2NUM(rtree_height(rtree));
68
56
  }
69
57
 
70
58
  static VALUE lrt_add_rect(VALUE self, VALUE id_obj, VALUE coord_obj)
@@ -72,11 +60,9 @@ static VALUE lrt_add_rect(VALUE self, VALUE id_obj, VALUE coord_obj)
72
60
  Check_Type(coord_obj, T_ARRAY);
73
61
  Check_Type(id_obj, T_FIXNUM);
74
62
 
75
- lrt_t *lrt;
76
- Data_Get_Struct(self, lrt_t, lrt);
63
+ rtree_t *rtree;
64
+ Data_Get_Struct(self, rtree_t, rtree);
77
65
 
78
- rtree_t
79
- *rtree = lrt->rtree;
80
66
  rtree_id_t
81
67
  id = FIX2ULONG(id_obj);
82
68
  size_t
@@ -132,11 +118,10 @@ static VALUE lrt_update(VALUE self)
132
118
  if (!rb_block_given_p())
133
119
  rb_raise(rb_eArgError, "Expected block");
134
120
 
135
- lrt_t *lrt;
136
- Data_Get_Struct(self, lrt_t, lrt);
137
- rtree_t *rtree = lrt->rtree;
138
- size_t len = 2 * state_dims(rtree->state);
121
+ rtree_t *rtree;
122
+ Data_Get_Struct(self, rtree_t, rtree);
139
123
 
124
+ size_t len = 2 * state_dims(rtree->state);
140
125
  int err = rtree_update(rtree, update_cb, &len);
141
126
 
142
127
  if (err != 0)
@@ -169,11 +154,9 @@ static VALUE lrt_search(VALUE self, VALUE coord_obj)
169
154
 
170
155
  Check_Type(coord_obj, T_ARRAY);
171
156
 
172
- lrt_t *lrt;
173
- Data_Get_Struct(self, lrt_t, lrt);
157
+ rtree_t *rtree;
158
+ Data_Get_Struct(self, rtree_t, rtree);
174
159
 
175
- rtree_t
176
- *rtree = lrt->rtree;
177
160
  size_t
178
161
  len = RARRAY_LEN(coord_obj),
179
162
  dim = state_dims(rtree->state);
@@ -215,10 +198,7 @@ static VALUE deserialise(VALUE cls, VALUE io_obj, deserialise_t *f)
215
198
  rb_raise(rb_eRuntimeError, "Failed read from stream");
216
199
  }
217
200
 
218
- lrt_t *lrt;
219
- VALUE obj = Data_Make_Struct(cls, lrt_t, NULL, lrt_free, lrt);
220
-
221
- lrt->rtree = rtree;
201
+ VALUE obj = Data_Wrap_Struct(cls, NULL, lrt_free, rtree);
222
202
 
223
203
  return obj;
224
204
  }
@@ -259,10 +239,7 @@ static VALUE lrt_csv_read(VALUE cls,
259
239
  rb_raise(rb_eRuntimeError, "Failed read from stream");
260
240
  }
261
241
 
262
- lrt_t *lrt;
263
- VALUE obj = Data_Make_Struct(cls, lrt_t, NULL, lrt_free, lrt);
264
-
265
- lrt->rtree = rtree;
242
+ VALUE obj = Data_Wrap_Struct(cls, NULL, lrt_free, rtree);
266
243
 
267
244
  return obj;
268
245
  }
@@ -281,9 +258,8 @@ static VALUE serialise(VALUE self, VALUE io_obj, serialise_t *f)
281
258
  rb_io_check_writable(io);
282
259
  FILE *fp = rb_io_stdio_file(io);
283
260
 
284
- lrt_t *lrt;
285
- Data_Get_Struct(self, lrt_t, lrt);
286
- rtree_t *rtree = lrt->rtree;
261
+ rtree_t *rtree;
262
+ Data_Get_Struct(self, rtree_t, rtree);
287
263
 
288
264
  int err = f(rtree, fp);
289
265
  if (err != 0)
@@ -304,12 +280,10 @@ static VALUE lrt_bsrt_write(VALUE self, VALUE io_obj)
304
280
 
305
281
  static VALUE lrt_identical(VALUE self, VALUE other)
306
282
  {
307
- lrt_t *lrt_self, *lrt_other;
308
- Data_Get_Struct(self, lrt_t, lrt_self);
309
- Data_Get_Struct(other, lrt_t, lrt_other);
310
- rtree_t
311
- *rtree_self = lrt_self->rtree,
312
- *rtree_other = lrt_other->rtree;
283
+ rtree_t *rtree_self, *rtree_other;
284
+
285
+ Data_Get_Struct(self, rtree_t, rtree_self);
286
+ Data_Get_Struct(other, rtree_t, rtree_other);
313
287
 
314
288
  if (rtree_identical(rtree_self, rtree_other))
315
289
  return Qtrue;
@@ -319,12 +293,12 @@ static VALUE lrt_identical(VALUE self, VALUE other)
319
293
 
320
294
  static VALUE lrt_clone(VALUE self)
321
295
  {
322
- lrt_t *lrt;
323
- Data_Get_Struct(self, lrt_t, lrt);
324
296
  rtree_t *rtree;
297
+ Data_Get_Struct(self, rtree_t, rtree);
325
298
 
299
+ rtree_t *clone;
326
300
  errno = 0;
327
- if ((rtree = rtree_clone(lrt->rtree)) == NULL)
301
+ if ((clone = rtree_clone(rtree)) == NULL)
328
302
  {
329
303
  if (errno)
330
304
  rb_sys_fail(__func__);
@@ -332,20 +306,17 @@ static VALUE lrt_clone(VALUE self)
332
306
  rb_raise(rb_eRuntimeError, "Failed clone");
333
307
  }
334
308
 
335
- lrt_t *lrt_cloned;
336
309
  VALUE cls = CLASS_OF(self);
337
- VALUE obj = Data_Make_Struct(cls, lrt_t, NULL, lrt_free, lrt_cloned);
338
-
339
- lrt_cloned->rtree = rtree;
310
+ VALUE obj = Data_Wrap_Struct(cls, NULL, lrt_free, clone);
340
311
 
341
312
  return obj;
342
313
  }
343
314
 
344
315
  static VALUE state_size_access(VALUE self, size_t (*f)(const state_t*))
345
316
  {
346
- lrt_t *lrt;
347
- Data_Get_Struct(self, lrt_t, lrt);
348
- return INT2NUM(f(lrt->rtree->state));
317
+ rtree_t *rtree;
318
+ Data_Get_Struct(self, rtree_t, rtree);
319
+ return INT2NUM(f(rtree->state));
349
320
  }
350
321
 
351
322
  static VALUE lrt_dim(VALUE self)
@@ -380,12 +351,11 @@ static VALUE lrt_branching_factor(VALUE self)
380
351
 
381
352
  static VALUE lrt_unit_sphere_volume(VALUE self)
382
353
  {
383
- lrt_t *lrt;
384
- Data_Get_Struct(self, lrt_t, lrt);
385
- return DBL2NUM(state_unit_sphere_volume(lrt->rtree->state));
354
+ rtree_t *rtree;
355
+ Data_Get_Struct(self, rtree_t, rtree);
356
+ return DBL2NUM(state_unit_sphere_volume(rtree->state));
386
357
  }
387
358
 
388
-
389
359
  void Init_rtree(void)
390
360
  {
391
361
  VALUE cls = rb_const_get(rb_cObject, rb_intern("RTreeC"));
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.2
4
+ version: 0.8.3
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-05-22 00:00:00.000000000 Z
11
+ date: 2021-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,8 +95,8 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1'
97
97
  description: |
98
- A Ruby extension for librtree implementing the R-tree
99
- spatial-index of Guttman-Green.
98
+ A Ruby extension implementing the R-tree spatial-index of
99
+ Guttman-Green.
100
100
  email: j.j.green@gmx.co.uk
101
101
  executables: []
102
102
  extensions:
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
126
  - !ruby/object:Gem::Version
127
127
  version: '0'
128
128
  requirements:
129
- - The librtree library
129
+ - The librtree library (1.0.2 or later)
130
130
  rubygems_version: 3.1.2
131
131
  signing_key:
132
132
  specification_version: 4