| Spread-Queue documentation | Contained in the Spread-Queue distribution. |
Spread::Queue::FIFO - basic FIFO queue
use Spread::Queue::FIFO;
my $q = new Spread::Queue::FIFO ("to-do list");
enqueue $q, "eat breakfast", "go to work";
my $task = dequeue $q;
Basic FIFO queue service. Not thread-safe.
Logging via Log::Channel.
my $q = new Spread::Queue::FIFO ("to-do list");
Creates a named FIFO queue. Name will be included in each log message.
enqueue $q, "eat breakfast", "go to work";
Append one or more items to the end of a queue.
my $node = dequeue $q; my ($queue_pending_time, $task) = @$node;
Remove the first item from the front of the queue and return it.
my $tasks = $q->pending;
Retrieve number of items in the queue.
foreach my $item ($q->all) { ... }
Return the queue contents as a list, for inspection.
Jason W. May <jmay@pobox.com>
Copyright (C) 2002 Jason W. May. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
L<Spread::Queue>
| Spread-Queue documentation | Contained in the Spread-Queue distribution. |
package Spread::Queue::FIFO; require 5.005_03; use strict; use vars qw($VERSION); $VERSION = '0.3'; use Time::HiRes qw( time ); # for queue pending time metrics use Log::Channel;
BEGIN { my $qlog = new Log::Channel; sub qlog { $qlog->(@_) } }
sub new { my $proto = shift; my $class = ref ($proto) || $proto; my $self = {}; bless ($self, $class); $self->{NAME} = shift; # optional $self->{QUEUE} = []; return $self; }
sub enqueue { my $self = shift; qlog "enqueue $self->{NAME}\n"; push (@{$self->{QUEUE}}, [ shift, time ] ); }
sub dequeue { my $self = shift; qlog "dequeue $self->{NAME}\n"; my $node = shift @{$self->{QUEUE}}; return if !$node; my ($data, $timestamp) = @$node; return wantarray ? ( $node->[0], time - $node->[1] ) : $node->[0]; }
sub pending { my $self = shift; return scalar @{$self->{QUEUE}}; }
sub all { my $self = shift; return map { $_->[0] } @{$self->{QUEUE}}; } sub length { my $self = shift; return scalar(@{$self->{QUEUE}}); } 1;