native_bsearch 0.0.2

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.
@@ -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: []