NAME
    Queue::Priority

SYNOPSIS
        use Queue::Priority;
        use List::Util qw( shuffle );

        my $queue = Queue::Priority->new( 10 );

        foreach my $i ( shuffle 1 .. 10 ) {
            $queue->insert( $i );
        }

        while (1) {
            my $i = $queue->remove or last;
            printf "%d * 2 = %d\n", $i, $i * 2;
        }

DESCRIPTION
    Priority queues automatically order their contents according to the
    inserted item's priority. Calling code must ensure that their queue
    items are comparable via this strategy (e.g. by overloading the <=>
    operator). This module is implemented as an array heap.

METHODS
  new
    Creates a new queue that can store $max items.

  count
    Returns the number of items currently stored.

  is_empty
    Returns true if the queue is empty.

  is_full
    Returns true if the queue is full.

  peek
    Returns the first (highest priority) element in the queue without
    removing it from the queue.

  is_shutdown
    Returns true if the queue has been shut down.

  shutdown
    Shuts down the queue, after which no items may be inserted. Items
    already in the queue can be pulled normally until empty, after which
    further calls to "remove" will return undefined.

  insert
    Inserts an item into the queue. Dies if the queue is full, has been shut
    down, or if the only argument is undefined.

  remove
    Removes and returns an item from the queue. If the queue is empty or
    shutdown, returns undefined immediately.

DEBUG
  dump
    Prints an indented representation of the heap structure.

AUTHOR
    Jeff Ober <jeffober@gmail.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2015 by Jeff Ober.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.