class Concurrent::Collection::JavaNonConcurrentPriorityQueue

@!macro internal_implementation_note
@!visibility private
@!macro priority_queue

def self.from_list(list, opts = {})

@!macro priority_queue_method_from_list
def self.from_list(list, opts = {})
  queue = new(opts)
  list.each{|item| queue << item }
  queue
end

def clear

@!macro priority_queue_method_clear
def clear
  @queue.clear
  true
end

def delete(item)

@!macro priority_queue_method_delete
def delete(item)
  found = false
  while @queue.remove(item) do
    found = true
  end
  found
end

def empty?

@!macro priority_queue_method_empty
def empty?
  @queue.size == 0
end

def include?(item)

@!macro priority_queue_method_include
def include?(item)
  @queue.contains(item)
end

def initialize(opts = {})

@!macro priority_queue_method_initialize
def initialize(opts = {})
  order = opts.fetch(:order, :max)
  if [:min, :low].include?(order)
    @queue = java.util.PriorityQueue.new(11) # 11 is the default initial capacity
  else
    @queue = java.util.PriorityQueue.new(11, java.util.Collections.reverseOrder())
  end
end

def length

@!macro priority_queue_method_length
def length
  @queue.size
end

def peek

@!macro priority_queue_method_peek
def peek
  @queue.peek
end

def pop

@!macro priority_queue_method_pop
def pop
  @queue.poll
end

def push(item)

@!macro priority_queue_method_push
def push(item)
  raise ArgumentError.new('cannot enqueue nil') if item.nil?
  @queue.add(item)
end