123456789_123456789_123456789_123456789_123456789_

Class: TypeProf::Utils::WorkList

Relationships & Source Files
Inherits: Object
Defined in: lib/typeprof/utils.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.newWorkList

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 144

def initialize
  @heap = []
  @set = MutableSet.new
end

Instance Attribute Details

#empty?Boolean (readonly)

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 186

def empty?
  @heap.empty?
end

Instance Method Details

#deletemin

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 163

def deletemin
  return nil if @heap.empty?
  val = @heap[0][1]
  @set.delete(val)
  if @heap.size == 1
    @heap.pop
    return val
  end
  @heap[0] = @heap.pop
  i = 0
  while (j = i * 2 + 1) < @heap.size
    j += 1 if j + 1 < @heap.size && (@heap[j][0] <=> @heap[j + 1][0]) >= 0
    break if (@heap[i][0] <=> @heap[j][0]) < 0
    @heap[i], @heap[j] = @heap[j], @heap[i]
    i = j
  end
  return val
end

#insert(key, val)

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 149

def insert(key, val)
  i = @heap.size
  @heap << [key, val]
  while i > 0 && (@heap[i][0] <=> @heap[i / 2][0]) < 0
    @heap[i], @heap[i / 2] = @heap[i / 2], @heap[i]
    i /= 2
  end
  @set << val
end

#inspect

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 190

def inspect
  "#<#{ self.class }:#{ @heap.map {|_key, val| val }.inspect }>"
end

#member?(val) ⇒ Boolean

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 159

def member?(val)
  @set[val]
end

#size

[ GitHub ]

  
# File 'lib/typeprof/utils.rb', line 182

def size
  @heap.size
end