Sha256: 5b25cd44ba8c3f9638b841ac28a0002f77bc2dda4aa54acca908553108cf915f

Contents?: true

Size: 695 Bytes

Versions: 2

Compression:

Stored size: 695 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

2 entries across 2 versions & 1 rubygems

Version Path
backports-2.8.1 lib/backports/2.0.0/array.rb
backports-2.8.0 lib/backports/2.0.0/array.rb