native_bsearch 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTA3MzNkZWNiZjMwYzkwOTQyYjE1MDFmMGU5ZTY2ZjFjOGExZjEzZA==
5
+ data.tar.gz: !binary |-
6
+ OWMzNTQ5ZTRmZDZhMjY3ZDk2MmJjYzM4NWQ1YmZkNDEzMDRiMjBkMQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ N2YzNzRjNmIzMmViNWZmY2E0Y2FhMDQxZGNmYzhiMDVjZjQ3ZWZhYmYyODAy
10
+ OTg3MTRmMGZiMjk2NTFhNTUwMTdlZTQ3MDUzMWNiMTU4Zjg1ODlmYTllZDU0
11
+ Y2ZmMmM0OGFjOGM3MDM4YzA0Y2Y4OGE1ZGVjYTkwNGI3ODU3Y2Y=
12
+ data.tar.gz: !binary |-
13
+ ZTNlYmRmMDEwYWVjYjA4MjE2Nzg5YmYwZjI2NDE0NzQ1MDJhOTA5MDUxOGMx
14
+ ODYzMzNmYzUxYTA4Y2YzNWQ4ZTExMzI1NjUwMDRmZDE3OGJjNmRjN2Y5ZWU3
15
+ ZTZkNzJhZDVlMmQ5NzE2YTNjNDkyNGIwZWNiNWEwMTJiY2E3MGE=
@@ -0,0 +1,3 @@
1
+ require 'mkmf'
2
+ dir_config 'native_bsearch'
3
+ create_makefile 'native_bsearch'
@@ -0,0 +1,70 @@
1
+ #include <ruby.h>
2
+
3
+ #ifndef RARRAY_PTR
4
+ #define RARRAY_PTR(ary) RARRAY(ary)->ptr
5
+ #endif
6
+ #ifndef RARRAY_LEN
7
+ #define RARRAY_LEN(ary) RARRAY(ary)->len
8
+ #endif
9
+
10
+ static ID id_cmp;
11
+
12
+ static VALUE rb_array_binary_index(int argc, VALUE* argv, VALUE self) {
13
+ int lower = 0;
14
+ int upper = RARRAY_LEN(self) - 1;
15
+ int i, comp;
16
+
17
+ while(lower <= upper) {
18
+ i = lower + (upper - lower) / 2;
19
+ if(argc == 1)
20
+ {
21
+ comp = NUM2INT(rb_funcall(argv[0], id_cmp, 1, RARRAY_PTR(self)[i]));
22
+ }
23
+ else
24
+ {
25
+ comp = NUM2INT(rb_yield_values(1, rb_ary_entry(self, i)));
26
+ }
27
+
28
+ if(comp == 0) {
29
+ return LONG2NUM(i);
30
+ } else if(comp > 0) {
31
+ lower = i + 1;
32
+ } else {
33
+ upper = i - 1;
34
+ };
35
+ }
36
+ return Qnil;
37
+ }
38
+
39
+ static VALUE rb_array_binary_search(int argc, VALUE* argv, VALUE self) {
40
+ int lower = 0;
41
+ int upper = RARRAY_LEN(self) - 1;
42
+ int i, comp;
43
+
44
+ while(lower <= upper) {
45
+ i = lower + (upper - lower) / 2;
46
+ if(argc == 1)
47
+ {
48
+ comp = NUM2INT(rb_funcall(argv[0], id_cmp, 1, RARRAY_PTR(self)[i]));
49
+ }
50
+ else
51
+ {
52
+ comp = NUM2INT(rb_yield_values(1, rb_ary_entry(self, i)));
53
+ }
54
+
55
+ if(comp == 0) {
56
+ return rb_ary_entry(self, i);
57
+ } else if(comp > 0) {
58
+ lower = i + 1;
59
+ } else {
60
+ upper = i - 1;
61
+ };
62
+ }
63
+ return Qnil;
64
+ }
65
+
66
+ void Init_native_bsearch() {
67
+ id_cmp = rb_intern("<=>");
68
+ rb_define_method(rb_cArray, "native_bindex", rb_array_binary_index, -1);
69
+ rb_define_method(rb_cArray, "native_bsearch", rb_array_binary_search, -1);
70
+ }
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: native_bsearch
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jake Christensen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake-compiler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: A C implementation of the binary search algorithm for Ruby arrays.
28
+ email: jakec43@gmail.com
29
+ executables: []
30
+ extensions:
31
+ - ext/native_bsearch/extconf.rb
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ext/native_bsearch/extconf.rb
35
+ - ext/native_bsearch/native_bsearch.c
36
+ homepage: https://github.com/HashFail/native_bsearch
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.2.2
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Native (C) binary search extension for arrays in Ruby
60
+ test_files: []