1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
package Redis::Fast::List;
# ABSTRACT: tie Perl arrays to Redis lists
# VERSION
# AUTHORITY
use strict;
use warnings;
use base qw/Redis::Fast Tie::Array/;
sub TIEARRAY {
my ($class, $list, @rest) = @_;
my $self = $class->new(@rest);
$self->__set_data($list);
return $self;
}
sub FETCH {
my ($self, $index) = @_;
$self->lindex($self->__get_data, $index);
}
sub FETCHSIZE {
my ($self) = @_;
$self->llen($self->__get_data);
}
sub STORE {
my ($self, $index, $value) = @_;
$self->lset($self->__get_data, $index, $value);
}
sub STORESIZE {
my ($self, $count) = @_;
$self->ltrim($self->__get_data, 0, $count);
# if $count > $self->FETCHSIZE;
}
sub CLEAR {
my ($self) = @_;
$self->del($self->__get_data);
}
sub PUSH {
my $self = shift;
my $list = $self->__get_data;
$self->rpush($list, $_) for @_;
}
sub POP {
my $self = shift;
$self->rpop($self->__get_data);
}
sub SHIFT {
my ($self) = @_;
$self->lpop($self->__get_data);
}
sub UNSHIFT {
my $self = shift;
my $list = $self->__get_data;
$self->lpush($list, $_) for @_;
}
sub SPLICE {
my ($self, $offset, $length) = @_;
$self->lrange($self->__get_data, $offset, $length);
# FIXME rest of @_ ?
}
sub EXTEND {
my ($self, $count) = @_;
$self->rpush($self->__get_data, '') for ($self->FETCHSIZE .. ($count - 1));
}
sub DESTROY { $_[0]->quit }
1; ## End of Redis::Fast::List
=head1 NAME
Redis::Fast::List - tie Perl arrays to Redis lists
=head1 SYNOPSYS
tie @my_list, 'Redis::Fast::List', 'list_name', @Redis_new_parameters;
$value = $my_list[$index];
$my_list[$index] = $value;
$count = @my_list;
push @my_list, 'values';
$value = pop @my_list;
unshift @my_list, 'values';
$value = shift @my_list;
## NOTE: fourth parameter of splice is *NOT* supported for now
@other_list = splice(@my_list, 2, 3);
@my_list = ();
=cut
|