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 )