DATAKV-11

RedisList implements Deque interface
This commit is contained in:
Costin Leau
2010-12-06 11:49:21 +02:00
parent 7abda9a0bd
commit 32cdf5be9a
2 changed files with 111 additions and 9 deletions

View File

@@ -145,7 +145,7 @@ public class DefaultRedisList<E> extends AbstractRedisCollection<E> implements R
@Override
public boolean remove(Object o) {
Long result = listOps.remove(0, o);
Long result = listOps.remove(1, o);
return (result != null && result.longValue() > 0);
}
@@ -272,15 +272,13 @@ public class DefaultRedisList<E> extends AbstractRedisCollection<E> implements R
@Override
public E peek() {
E element = listOps.index(0);
return (element == null ? null : element);
return listOps.index(0);
}
@Override
public E poll() {
E element = listOps.leftPop();
return (element == null ? null : element);
return listOps.leftPop();
}
@@ -293,6 +291,112 @@ public class DefaultRedisList<E> extends AbstractRedisCollection<E> implements R
return value;
}
//
// Dequeue
//
@Override
public void addFirst(E e) {
listOps.leftPush(e);
cap();
}
@Override
public void addLast(E e) {
add(e);
}
@Override
public Iterator<E> descendingIterator() {
throw new UnsupportedOperationException();
}
@Override
public E getFirst() {
return element();
}
@Override
public E getLast() {
E e = peekLast();
if (e == null) {
throw new NoSuchElementException();
}
return e;
}
@Override
public boolean offerFirst(E e) {
addFirst(e);
return true;
}
@Override
public boolean offerLast(E e) {
addLast(e);
return true;
}
@Override
public E peekFirst() {
return peek();
}
@Override
public E peekLast() {
return listOps.index(-1);
}
@Override
public E pollFirst() {
return poll();
}
@Override
public E pollLast() {
return listOps.rightPop();
}
@Override
public E pop() {
E e = pollFirst();
if (e == null) {
throw new NoSuchElementException();
}
return e;
}
@Override
public void push(E e) {
addFirst(e);
}
@Override
public E removeFirst() {
return pop();
}
@Override
public boolean removeFirstOccurrence(Object o) {
return remove(o);
}
@Override
public E removeLast() {
E e = pollLast();
if (e == null) {
throw new NoSuchElementException();
}
return e;
}
@Override
public boolean removeLastOccurrence(Object o) {
Long result = listOps.remove(-1, o);
return (result != null && result.longValue() > 0);
}
//
// BlockingQueue
//
@@ -343,6 +447,4 @@ public class DefaultRedisList<E> extends AbstractRedisCollection<E> implements R
public E take() throws InterruptedException {
return poll(0, TimeUnit.SECONDS);
}
}

View File

@@ -15,9 +15,9 @@
*/
package org.springframework.data.keyvalue.redis.util;
import java.util.Deque;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.BlockingQueue;
/**
* Redis extension for the {@link List} contract. Supports {@link List} and {@link Queue} specific
@@ -25,7 +25,7 @@ import java.util.concurrent.BlockingQueue;
*
* @author Costin Leau
*/
public interface RedisList<E> extends RedisStore<String>, List<E>, BlockingQueue<E> {
public interface RedisList<E> extends RedisStore<String>, List<E>, Deque<E> {
List<E> range(long start, long end);