tmm1 (owner)

Revisions

  • 0e9616 tmm1 Mon Sep 28 11:26:49 -0700 2009
gist: 195667 Download_button fork
public
Description:
async jruby priority queue
Public Clone URL: git://gist.github.com/195667.git
Embed All Files: show embed
Ruby #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
require 'java'
 
class AsyncPriorityQueue < java.util.PriorityQueue
  def initialize(*args)
    super
    @popq = []
  end
  def add(o)
    super unless contains?(o)
  end
  def push(o)
    if add(o) and !@popq.empty?
      @popq.shift.call(self.poll)
    end
  end
  def pop(prc=nil, &blk)
    raise ArgumentError, 'block or proc required' unless blk ||= prc
 
    if empty?
      @popq << blk
    else
      blk.call(self.poll)
    end
  end
end