mirror of
https://github.com/fluencelabs/redis
synced 2025-06-17 03:01:20 +00:00
New file dump format, perl client library added
This commit is contained in:
85
client-libraries/perl/lib/Redis/List.pm
Normal file
85
client-libraries/perl/lib/Redis/List.pm
Normal file
@ -0,0 +1,85 @@
|
||||
package Redis::List;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base qw/Redis Tie::Array/;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Redis::List - tie perl arrays into Redis lists
|
||||
|
||||
=head1 SYNOPSYS
|
||||
|
||||
tie @a, 'Redis::List', 'name';
|
||||
|
||||
=cut
|
||||
|
||||
# mandatory methods
|
||||
sub TIEARRAY {
|
||||
my ($class,$name) = @_;
|
||||
my $self = $class->new;
|
||||
$self->{name} = $name;
|
||||
bless $self => $class;
|
||||
}
|
||||
|
||||
sub FETCH {
|
||||
my ($self,$index) = @_;
|
||||
$self->lindex( $self->{name}, $index );
|
||||
}
|
||||
|
||||
sub FETCHSIZE {
|
||||
my ($self) = @_;
|
||||
$self->llen( $self->{name} );
|
||||
}
|
||||
|
||||
sub STORE {
|
||||
my ($self,$index,$value) = @_;
|
||||
$self->lset( $self->{name}, $index, $value );
|
||||
}
|
||||
|
||||
sub STORESIZE {
|
||||
my ($self,$count) = @_;
|
||||
$self->ltrim( $self->{name}, 0, $count );
|
||||
# if $count > $self->FETCHSIZE;
|
||||
}
|
||||
|
||||
sub CLEAR {
|
||||
my ($self) = @_;
|
||||
$self->del( $self->{name} );
|
||||
}
|
||||
|
||||
sub PUSH {
|
||||
my $self = shift;
|
||||
$self->rpush( $self->{name}, $_ ) foreach @_;
|
||||
}
|
||||
|
||||
sub SHIFT {
|
||||
my $self = shift;
|
||||
$self->lpop( $self->{name} );
|
||||
}
|
||||
|
||||
sub UNSHIFT {
|
||||
my $self = shift;
|
||||
$self->lpush( $self->{name}, $_ ) foreach @_;
|
||||
}
|
||||
|
||||
sub SPLICE {
|
||||
my $self = shift;
|
||||
my $offset = shift;
|
||||
my $length = shift;
|
||||
$self->lrange( $self->{name}, $offset, $length );
|
||||
# FIXME rest of @_ ?
|
||||
}
|
||||
|
||||
sub EXTEND {
|
||||
my ($self,$count) = @_;
|
||||
$self->rpush( $self->{name}, '' ) foreach ( $self->FETCHSIZE .. ( $count - 1 ) );
|
||||
}
|
||||
|
||||
sub DESTROY {
|
||||
my $self = shift;
|
||||
$self->quit;
|
||||
}
|
||||
|
||||
1;
|
Reference in New Issue
Block a user