class Array
Public Instance Methods
native_bindex(*args)
click to toggle source
static VALUE rb_array_binary_index(int argc, VALUE* argv, VALUE self) { int lower = 0; int upper = RARRAY_LEN(self) - 1; int i, comp; while(lower <= upper) { i = lower + (upper - lower) / 2; if(argc == 1) { comp = NUM2INT(rb_funcall(argv[0], id_cmp, 1, RARRAY_PTR(self)[i])); } else { comp = NUM2INT(rb_yield_values(1, rb_ary_entry(self, i))); } if(comp == 0) { return LONG2NUM(i); } else if(comp > 0) { lower = i + 1; } else { upper = i - 1; }; } return Qnil; }
native_bsearch(*args)
click to toggle source
static VALUE rb_array_binary_search(int argc, VALUE* argv, VALUE self) { int lower = 0; int upper = RARRAY_LEN(self) - 1; int i, comp; while(lower <= upper) { i = lower + (upper - lower) / 2; if(argc == 1) { comp = NUM2INT(rb_funcall(argv[0], id_cmp, 1, RARRAY_PTR(self)[i])); } else { comp = NUM2INT(rb_yield_values(1, rb_ary_entry(self, i))); } if(comp == 0) { return rb_ary_entry(self, i); } else if(comp > 0) { lower = i + 1; } else { upper = i - 1; }; } return Qnil; }