class Concurrent::Collection::RubyNonConcurrentPriorityQueue
@!macro priority_queue
@!visibility private @!macro internal_implementation_note
Public Class Methods
from_list(list, opts = {})
click to toggle source
@!macro priority_queue_method_from_list
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 89 def self.from_list(list, opts = {}) queue = new(opts) list.each{|item| queue << item } queue end
new(opts = {})
click to toggle source
@!macro priority_queue_method_initialize
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 11 def initialize(opts = {}) order = opts.fetch(:order, :max) @comparator = [:min, :low].include?(order) ? -1 : 1 clear end
Public Instance Methods
clear()
click to toggle source
@!macro priority_queue_method_clear
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 18 def clear @queue = [nil] @length = 0 true end
delete(item)
click to toggle source
@!macro priority_queue_method_delete
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 25 def delete(item) return false if empty? original_length = @length k = 1 while k <= @length if @queue[k] == item swap(k, @length) @length -= 1 sink(k) @queue.pop else k += 1 end end @length != original_length end
empty?()
click to toggle source
@!macro priority_queue_method_empty
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 43 def empty? size == 0 end
include?(item)
click to toggle source
@!macro priority_queue_method_include
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 48 def include?(item) @queue.include?(item) end
Also aliased as: has_priority?
length()
click to toggle source
@!macro priority_queue_method_length
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 54 def length @length end
Also aliased as: size
peek()
click to toggle source
@!macro priority_queue_method_peek
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 60 def peek empty? ? nil : @queue[1] end
pop()
click to toggle source
@!macro priority_queue_method_pop
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 65 def pop return nil if empty? max = @queue[1] swap(1, @length) @length -= 1 sink(1) @queue.pop max end
push(item)
click to toggle source
@!macro priority_queue_method_push
# File lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb, line 78 def push(item) raise ArgumentError.new('cannot enqueue nil') if item.nil? @length += 1 @queue << item swim(@length) true end