Sha256: 872158270a35047f89d4d8aeb25c91b06f5ca84b3ddcbc4e4d69b15122a65ff8

Contents?: true

Size: 696 Bytes

Versions: 5

Compression:

Stored size: 696 Bytes

Contents

class Array
  def bsearch
    return to_enum(__method__) unless block_given?
    from = 0
    to   = size - 1
    satisfied = nil
    while from <= to do
      midpoint = (from + to).div(2)
      result = yield(cur = self[midpoint])
      case result
      when Numeric
        return cur if result == 0
        result = result < 0
      when true
        satisfied = cur
      when nil, false
        # nothing to do
      else
        raise TypeError, "wrong argument type #{result.class} (must be numeric, true, false or nil)"
      end

      if result
        to = midpoint - 1
      else
        from = midpoint + 1
      end
    end
    satisfied
  end unless method_defined? :bsearch
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
backports-3.0.3 lib/backports/2.0.0/array.rb
backports-3.0.2 lib/backports/2.0.0/array.rb
backports-3.0.1 lib/backports/2.0.0/array.rb
backports-3.0.0 lib/backports/2.0.0/array.rb
backports-2.8.2 lib/backports/2.0.0/array.rb