Cache-Memcached-PDeque
view release on metacpan or search on metacpan
lib/Cache/Memcached/PDeque.pm view on Meta::CPAN
package Cache::Memcached::PDeque;
use 5.006;
use strict;
use warnings;
use Cache::Memcached::Fast;
use Carp::Assert;
use Data::Dump;
use Moose;
use Moose::Util::TypeConstraints;
use Try::Tiny;
=head1 NAME
Cache::Memcached::PDeque - Implements a priority deque using memcached as storage
=head1 VERSION
Version 0.03
=cut
our $VERSION = '0.03';
=head1 SYNOPSIS
use Cache::Memcached::PDeque;
# Create a PDeque with a priorities 1 and 2
my $dq = Cache::Memcached::PDeque->new( name => 'aName', max_prio => 2 );
# Add and remove some elements
$dq->push('a'); # ('a')
$dq->unshift('b'); # ('b','a')
$dq->push('c'); # ('b','a','c')
$dq->front; # returns 'b' without altering $dq
$dq->back; # returns 'c' without altering $dq
$dq->size; # returns 3
$dq->pop(); # returns 'c'
$dq->pop(); # returns 'a'
$dq->shift(); # returns 'b'
# Make use of priorities
$dq->push(1,'l1'); # ('l1')
$dq->push(2,'h1'); # ('h1','l1')
$dq->size; # returns 2, but:
$dq->size(1); # returns 1 - only 1 element with priority 1
$dq->shift(); # returns 'h1'
$dq->shift(); # returns 'l1'
# Complex structures are supported
my @list = ( 1, 'a', 2, 'b', 3, 'c' );
$dq->push(\@list); # Push reference to a list
my $href = $dq->pop; # Get back reference to a list
# A oneliner to copy all elements to a simple list
my @dq;
$dq->foreach( sub { my ($e, $p) = @_; push @{$p}, $e }, \@dq);
# Removes all elements
$dq->clear;
=head1 DESCRIPTION
This is an implementation of a double-ended queue, with support for priorities.
( run in 1.741 second using v1.01-cache-2.11-cpan-39bf76dae61 )