package Autocache::WorkQueue;
use Any::Moose;
use Autocache::Logger qw(get_logger);
#
# Null Memory Strategy - never expire, in memory cache
#
has '_queue' => (
is => 'rw',
default => sub { [] },
init_arg => undef,
);
#
# push
#
sub push
{
my ($self,$task) = @_;
get_logger()->debug( "push" );
push @{$self->_queue}, $task;
return 1;
}
#
# pop
#
sub pop
{
my ($self,$key,$rec) = @_;
get_logger()->debug( "pop" );
shift @{$self->_queue};
}
sub size
{
my ($self,$key,$rec) = @_;
get_logger()->debug( "size" );
return scalar @{$self->_queue};
}
#
# execute
#
sub execute
{
my ($self) = @_;
get_logger()->debug( "execute" );
return 0 unless $self->size();
my $count = 0;
while( my $task = $self->pop )
{
$task->();
++$count;
}
return $count;
}
no Any::Moose;
__PACKAGE__->meta->make_immutable;
1;