Continuation queue implementation for JRuby.
On JRuby, we’d rather use reliable and heavily battle tested j.u.c. primitives with well described semantics than informally specified, clumsy and limited Ruby standard library parts.
This is an implementation of the continuation queue on top of the linked blocking queue in j.u.c.
Compared to the Ruby standard library Queue, there is one limitation: you cannot push a nil on the queue, it will fail with a null pointer exception. @private
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 52 def clear @q.clear end
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 56 def method_missing(selector, *args, &block) @q.__send__(selector, *args, &block) end
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 42 def poll(timeout_in_ms = nil) if timeout_in_ms v = @q.poll(timeout_in_ms, TimeUnit::MILLISECONDS) raise ::Timeout::Error.new("operation did not finish in #{timeout_in_ms} ms") if v.nil? v else @q.poll end end
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 38 def pop @q.take end
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 29 def push(el, timeout_in_ms = nil) if timeout_in_ms @q.offer(el, timeout_in_ms, TimeUnit::MILLISECONDS) else @q.offer(el) end end
Generated with the Darkfish Rdoc Generator 2.