class UV::PriorityQueue
Constants
- VERSION
Public Class Methods
new(opts = {}, loop = ::Libuv::Loop.current, &blk)
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 5 def initialize(opts = {}, loop = ::Libuv::Loop.current, &blk) blk ||= lambda { |x, y| (x <=> y) == 1 } fifo_blk = nil @fifo = !!opts[:fifo] if @fifo fifo_blk = lambda do |x,y| if x[0] == y[0] x[1] < y[1] else blk.call(x[0], y[0]) end end end @heap = Containers::Heap.new(&(fifo_blk || blk)) @callbacks = [] @loop = loop || ::Libuv::Loop.default end
Public Instance Methods
clear()
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 35 def clear @heap.clear end
delete(pri)
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 63 def delete(pri) @heap.delete(pri) end
empty?()
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 39 def empty? @heap.empty? end
has_priority?(priority)
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 43 def has_priority?(priority) @heap.has_key?(priority) end
next()
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 47 def next @heap.next end
pop(callback = nil, &blk)
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 51 def pop(callback = nil, &blk) callback ||= blk @loop.schedule do if @heap.empty? @callbacks << callback else callback.call @heap.pop end end nil end
push(obj, pri)
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 27 def push(obj, pri) pri = [pri, Time.now.to_i] if @fifo @loop.schedule do @heap.push(pri, obj) @callbacks.shift.call(@heap.pop) until @heap.empty? || @callbacks.empty? end end
size()
click to toggle source
# File lib/uv-priority-queue/priority_queue.rb, line 23 def size @heap.size end