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