Class: RTreeBase
- Inherits:
-
Object
- Object
- RTreeBase
- Defined in:
- lib/rtree.rb
Overview
The internal Ruby/C interface for RTree, not documented in YARD.
Direct Known Subclasses
Constant Summary collapse
- SPLIT_QUADRATIC =
INT2NUM(RTREE_SPLIT_QUADRATIC)
- SPLIT_LINEAR =
INT2NUM(RTREE_SPLIT_LINEAR)
- SPLIT_GREENE =
INT2NUM(RTREE_SPLIT_GREENE)
- AXIS_HEIGHT =
INT2NUM(axis_height)
- AXIS_WIDTH =
INT2NUM(axis_width)
Class Method Summary collapse
- .bsrt_read(io_obj) ⇒ Object
- .bugreport ⇒ Object
- .csv_read(io_obj, dim_obj, flags_obj) ⇒ Object
- .json_read(io_obj) ⇒ Object
- .url ⇒ Object
- .version ⇒ Object
Instance Method Summary collapse
- #add_rect(id_obj, coord_obj) ⇒ Object
- #branch_size ⇒ Object
- #branching_factor ⇒ Object
- #bsrt_write(io_obj) ⇒ Object
- #clone ⇒ Object
- #dim ⇒ Object
- #eq?(other) ⇒ Boolean
- #free ⇒ Object
- #height ⇒ Object
- #initialize(dim_obj, flags_obj) ⇒ Object constructor
- #json_write(io_obj) ⇒ Object
- #node_size ⇒ Object
- #page_size ⇒ Object
- #postscript(style_obj, axis_obj, extent_obj, margin_obj, io_obj) ⇒ Object
- #rect_size ⇒ Object
- #search(coord_obj) ⇒ Object
- #size ⇒ Object
- #unit_sphere_volume ⇒ Object
- #update! ⇒ Object
Constructor Details
#initialize(dim_obj, flags_obj) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'ext/rtree/rtree.c', line 33 static VALUE rt_init(VALUE self, VALUE dim_obj, VALUE flags_obj) { Check_Type(dim_obj, T_FIXNUM); size_t dim = FIX2ULONG(dim_obj); Check_Type(dim_obj, T_FIXNUM); state_flags_t flags = FIX2UINT(flags_obj); rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); if ((rtree_init(rtree, dim, flags)) != 0) rb_raise(rb_eNoMemError, "failed to init rtree"); return self; } |
Class Method Details
.bsrt_read(io_obj) ⇒ Object
216 217 218 219 |
# File 'ext/rtree/rtree.c', line 216 static VALUE rt_bsrt_read(VALUE cls, VALUE io_obj) { return deserialise(cls, io_obj, rtree_bsrt_read); } |
.bugreport ⇒ Object
371 372 373 374 |
# File 'ext/rtree/rtree.c', line 371 static VALUE rt_bugreport(VALUE self) { return rb_str_new_cstr(rtree_package_bugreport); } |
.csv_read(io_obj, dim_obj, flags_obj) ⇒ Object
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'ext/rtree/rtree.c', line 221 static VALUE rt_csv_read(VALUE cls, VALUE io_obj, VALUE dim_obj, VALUE flags_obj) { Check_Type(io_obj, T_FILE); rb_io_t *io; GetOpenFile(io_obj, io); rb_io_check_initialized(io); rb_io_check_readable(io); FILE *fp = rb_io_stdio_file(io); Check_Type(dim_obj, T_FIXNUM); size_t dim = FIX2ULONG(dim_obj); Check_Type(dim_obj, T_FIXNUM); state_flags_t flags = FIX2UINT(flags_obj); rtree_t *rtree; errno = 0; if ((rtree = rtree_csv_read(fp, dim, flags)) == NULL) { if (errno) rb_sys_fail(__func__); else rb_raise(rb_eRuntimeError, "Failed read from stream"); } return TypedData_Wrap_Struct(cls, &rtree_type, rtree); } |
.json_read(io_obj) ⇒ Object
211 212 213 214 |
# File 'ext/rtree/rtree.c', line 211 static VALUE rt_json_read(VALUE cls, VALUE io_obj) { return deserialise(cls, io_obj, rtree_json_read); } |
.url ⇒ Object
376 377 378 379 |
# File 'ext/rtree/rtree.c', line 376 static VALUE rt_url(VALUE self) { return rb_str_new_cstr(rtree_package_url); } |
.version ⇒ Object
366 367 368 369 |
# File 'ext/rtree/rtree.c', line 366 static VALUE rt_version(VALUE self) { return rb_str_new_cstr(rtree_package_version); } |
Instance Method Details
#add_rect(id_obj, coord_obj) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'ext/rtree/rtree.c', line 65 static VALUE rt_add_rect(VALUE self, VALUE id_obj, VALUE coord_obj) { Check_Type(coord_obj, T_ARRAY); Check_Type(id_obj, T_FIXNUM); rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); rtree_id_t id = FIX2ULONG(id_obj); size_t len = RARRAY_LEN(coord_obj), dim = state_dims(rtree->state); if (len != 2 * dim) rb_raise(rb_eArgError, "expected array length %zi, got %zi", 2 * dim, len); rtree_coord_t coord[len]; for (size_t i = 0 ; i < len ; i++) coord[i] = NUM2DBL(rb_ary_entry(coord_obj, i)); int err; if ((err = rtree_add_rect(rtree, id, coord)) != 0) { if (errno) rb_sys_fail("add_rect"); else rb_raise(rb_eRuntimeError, "%s", rtree_strerror(err)); } return self; } |
#branch_size ⇒ Object
342 343 344 345 |
# File 'ext/rtree/rtree.c', line 342 static VALUE rt_branch_size(VALUE self) { return state_size_access(self, state_branch_size); } |
#branching_factor ⇒ Object
347 348 349 350 |
# File 'ext/rtree/rtree.c', line 347 static VALUE rt_branching_factor(VALUE self) { return state_size_access(self, state_branching_factor); } |
#bsrt_write(io_obj) ⇒ Object
279 280 281 282 |
# File 'ext/rtree/rtree.c', line 279 static VALUE rt_bsrt_write(VALUE self, VALUE io_obj) { return serialise(self, io_obj, rtree_bsrt_write); } |
#clone ⇒ Object
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'ext/rtree/rtree.c', line 297 static VALUE rt_clone(VALUE self) { rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); rtree_t *clone; errno = 0; if ((clone = rtree_clone(rtree)) == NULL) { if (errno) rb_sys_fail(__func__); else rb_raise(rb_eRuntimeError, "Failed clone"); } return TypedData_Wrap_Struct(CLASS_OF(self), &rtree_type, clone); } |
#dim ⇒ Object
322 323 324 325 |
# File 'ext/rtree/rtree.c', line 322 static VALUE rt_dim(VALUE self) { return state_size_access(self, state_dims); } |
#eq?(other) ⇒ Boolean
284 285 286 287 288 289 290 291 292 293 294 295 |
# File 'ext/rtree/rtree.c', line 284 static VALUE rt_identical(VALUE self, VALUE other) { rtree_t *rtree_self, *rtree_other; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree_self); TypedData_Get_Struct(other, rtree_t, &rtree_type, rtree_other); if (rtree_identical(rtree_self, rtree_other)) return Qtrue; else return Qfalse; } |
#free ⇒ Object
50 51 52 53 54 55 56 |
# File 'ext/rtree/rtree.c', line 50 static VALUE rt_release(VALUE self) { rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); rtree_destroy(rtree); return self; } |
#height ⇒ Object
58 59 60 61 62 63 |
# File 'ext/rtree/rtree.c', line 58 static VALUE rt_height(VALUE self) { rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); return INT2NUM(rtree_height(rtree)); } |
#json_write(io_obj) ⇒ Object
274 275 276 277 |
# File 'ext/rtree/rtree.c', line 274 static VALUE rt_json_write(VALUE self, VALUE io_obj) { return serialise(self, io_obj, rtree_json_write); } |
#node_size ⇒ Object
332 333 334 335 |
# File 'ext/rtree/rtree.c', line 332 static VALUE rt_node_size(VALUE self) { return state_size_access(self, state_node_size); } |
#page_size ⇒ Object
327 328 329 330 |
# File 'ext/rtree/rtree.c', line 327 static VALUE rt_page_size(VALUE self) { return state_size_access(self, state_page_size); } |
#postscript(style_obj, axis_obj, extent_obj, margin_obj, io_obj) ⇒ Object
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
# File 'ext/rtree/rtree.c', line 381 static VALUE rt_postscript(VALUE self, VALUE style_obj, VALUE axis_obj, VALUE extent_obj, VALUE margin_obj, VALUE io_obj) { rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); style_t *style; TypedData_Get_Struct(style_obj, style_t, &style_type, style); Check_Type(io_obj, T_FILE); rb_io_t *io; GetOpenFile(io_obj, io); rb_io_check_initialized(io); rb_io_check_writable(io); FILE *fp = rb_io_stdio_file(io); float extent = NUM2DBL(extent_obj), margin = NUM2DBL(margin_obj); Check_Type(axis_obj, T_FIXNUM); extent_axis_t axis = FIX2UINT(axis_obj); rtree_postscript_t opt = { .style = style, .axis = axis, .extent = extent, .margin = margin, .title = "librtree-ruby output" }; int err; if ((err = rtree_postscript(rtree, &opt, fp)) != 0) rb_raise(rb_eRuntimeError, "librtree: %s", rtree_strerror(err)); return Qnil; } |
#rect_size ⇒ Object
337 338 339 340 |
# File 'ext/rtree/rtree.c', line 337 static VALUE rt_rect_size(VALUE self) { return state_size_access(self, state_rect_size); } |
#search(coord_obj) ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'ext/rtree/rtree.c', line 157 static VALUE rt_search(VALUE self, VALUE coord_obj) { if (!rb_block_given_p()) rb_raise(rb_eArgError, "Expected block"); Check_Type(coord_obj, T_ARRAY); rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); size_t len = RARRAY_LEN(coord_obj), dim = state_dims(rtree->state); if (len != 2 * dim) rb_raise(rb_eArgError, "expected array length %zi, got %zi", 2 * dim, len); rtree_coord_t coord[len]; for (size_t i = 0 ; i < len ; i++) coord[i] = NUM2DBL(rb_ary_entry(coord_obj, i)); rtree_search(rtree, coord, search_cb, NULL); return Qnil; } |
#size ⇒ Object
359 360 361 362 363 364 |
# File 'ext/rtree/rtree.c', line 359 static VALUE rt_size(VALUE self) { rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); return INT2NUM(rtree_bytes(rtree)); } |
#unit_sphere_volume ⇒ Object
352 353 354 355 356 357 |
# File 'ext/rtree/rtree.c', line 352 static VALUE rt_unit_sphere_volume(VALUE self) { rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); return DBL2NUM(state_unit_sphere_volume(rtree->state)); } |
#update! ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'ext/rtree/rtree.c', line 123 static VALUE rt_update(VALUE self) { if (!rb_block_given_p()) rb_raise(rb_eArgError, "Expected block"); rtree_t *rtree; TypedData_Get_Struct(self, rtree_t, &rtree_type, rtree); size_t len = 2 * state_dims(rtree->state); int err = rtree_update(rtree, update_cb, &len); if (err != 0) rb_raise(rb_eRuntimeError, "librtree: %s", strerror(err)); return self; } |