From 14f9ac6110d126004b38b292b3e7002f84519629 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 22 Mar 2009 17:31:40 +0000 Subject: [PATCH] sinter git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/Redis@33 447b33ff-793d-4489-8442-9bea7d161be5 --- lib/Redis.pm | 41 +++++++++++++++++++++++++++++------------ t/01-Redis.t | 7 ++++++- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/lib/Redis.pm b/lib/Redis.pm index 70df1ef..10594cd 100644 --- a/lib/Redis.pm +++ b/lib/Redis.pm @@ -79,6 +79,23 @@ sub _sock_result_bulk { _sock_read_bulk(); } +sub _sock_result_bulk_list { + my $self = shift; + warn "## _sock_result_bulk_list ",dump( @_ ); + + my $size = $self->_sock_send( @_ ); + confess $size unless $size > 0; + $size--; + + my @list = ( 0 .. $size ); + foreach ( 0 .. $size ) { + $list[ $_ ] = _sock_read_bulk(); + } + + warn "## list = ", dump( @list ); + return @list; +} + sub __sock_ok { my $ok = <$sock>; return undef if $ok eq "nil\r\n"; @@ -317,18 +334,7 @@ sub llen { sub lrange { my ( $self, $key, $start, $end ) = @_; - my $size = $self->_sock_send('LRANGE', $key, $start, $end); - - confess $size unless $size > 0; - $size--; - - my @list = ( 0 .. $size ); - foreach ( 0 .. $size ) { - $list[ $_ ] = _sock_read_bulk(); - } - - warn "## lrange $key $start $end = [$size] ", dump( @list ); - return @list; + $self->_sock_result_bulk_list('LRANGE', $key, $start, $end); } =head2 ltrim @@ -443,6 +449,17 @@ sub sismember { $self->_sock_send_bulk_number( 'SISMEMBER', $key, $member ); } +=head2 sinter + + $r->sinter( $key1, $key2, ... ); + +=cut + +sub sinter { + my $self = shift; + $self->_sock_result_bulk_list( 'SINTER', @_ ); +} + =head1 AUTHOR Dobrica Pavlinusic, C<< >> diff --git a/t/01-Redis.t b/t/01-Redis.t index 96f143c..3fb3565 100755 --- a/t/01-Redis.t +++ b/t/01-Redis.t @@ -3,7 +3,7 @@ use warnings; use strict; -use Test::More tests => 83; +use Test::More tests => 84; use lib 'lib'; @@ -131,4 +131,9 @@ ok( $o->srem( $set, 'foo' ), 'srem' ); ok( ! $o->srem( $set, 'foo' ), 'srem again' ); cmp_ok( $o->scard( $set ), '==', 0, 'scard' ); +$o->sadd( 'test-set1', $_ ) foreach ( 'foo', 'bar', 'baz' ); +$o->sadd( 'test-set2', $_ ) foreach ( 'foo', 'baz', 'xxx' ); + +is_deeply( [ $o->sinter( 'test-set1', 'test-set2' ) ], [ 'baz', 'foo' ], 'siter' ); + ok( $o->quit, 'quit' ); -- 2.20.1