NAME
    Timeout::Queue - A priority queue made for handling timeouts

DESCRIPTION
    This module is a simple priority queue based on perl's own array
    structures. The actual sleeping is not done by this module as it is ment
    for integration with a IO::Select based event loop or similar.

    Inserts are handled by using splice, deletes are done by marking and
    later shifting off when it is posible.

SYNOPSIS
      #
      # Use as an object
      #

      use Timeout::Queue;

      my $timeouts = new Timeout::Queue(Time => sub { return time; });
      $timeouts->queue(
        timeout => 1, # time out in 1 seconds.
        callme => sub {
            print "I timed out!!\n";
        }
      );
      sleep $timeouts->timeout();

      foreach my $item ($timeouts->handle()) {
        $item->{callme}->();
      }

      #
      # Use with functions and own array
      # 

      use Timeout::Queue qw(queue_timeout handle_timeout, get_timeout);

      my @timeouts;
      my $timeout;
      my $timeout_id = 1;

      queue_timeout(\@timeouts, time,
        timeout_id = ++$timeout_id,
        timeout => 1, # time out in 1 seconds.
        callme => sub {
            print "I timed out!!\n";
        }
      );

      # Get the first timeout
      $timeout = get_timeout(\@timeouts, time);

      sleep $timeout;

      foreach my $item (handle_timeout(\@timeouts, time)) {
        $item->{callme}->();
      }

      # Get the next timeout 
      $timeout = get_timeout(\@timeouts, time);

METHODS
    new()
        Creates a new Timeout::Queue object.

        You can optionally add a a "Time" option if you would like to use
        something else than the build in time function. This can be usefull
        if your sleeping mechanism supports sub second precision.

        The default works like this if nothing is given:

          $timeouts->new(Time => sub { return time; });

    queue(timeout => $timeout)
        Queue a new timeout item, only the timeout values is used from the
        list. The rest will be returned later in a hash reference by
        "handle()".

        Returns the timeout id or an array with timeout id and the next
        timeout in the queue.

    delete($key, $value)
        Delete the item's where key and value are equal to what is given.

        Returns the next timeout in the queue.

    handle()
        Returns all the items that have timed out so far.

    timeout()
        Return the next timeout on the queue or undef if it's empty.

    timeouts()
        Return array refrence with queued timeouts.

    queue_timeout(\@timeouts, timeout => $timeout)
        Queue a new timeout item, only the timeout values is used from the
        list. The rest will be returned later in a hash reference by
        "handle_timeout()".

        Returns the next timeout or -1 if it was not change by the queueing.

    delete_timeout(\@timeouts, $key, $value)
        Delete the item's where key and value are equal to what is given.

        Returns the next timeout.

    handle_timeout(\@timeouts, \$timeout)
        Returns all the items that have timed out so far.

    get_timeout(\@timeouts)
        Return the next timeout on the queue or undef if it's empty.

AUTHOR
    Troels Liebe Bentsen <tlb@rapanden.dk>

COPYRIGHT
    Copyright(C) 2005-2007 Troels Liebe Bentsen

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

