From 32cdf5be9af547be85d282a47ef5712cdd55f515 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 6 Dec 2010 11:49:21 +0200 Subject: [PATCH] DATAKV-11 RedisList implements Deque interface --- .../keyvalue/redis/util/DefaultRedisList.java | 116 ++++++++++++++++-- .../data/keyvalue/redis/util/RedisList.java | 4 +- 2 files changed, 111 insertions(+), 9 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java index 830899172..1de20d3e3 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java @@ -145,7 +145,7 @@ public class DefaultRedisList extends AbstractRedisCollection 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 extends AbstractRedisCollection 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 extends AbstractRedisCollection 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 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 extends AbstractRedisCollection implements R public E take() throws InterruptedException { return poll(0, TimeUnit.SECONDS); } - - } \ No newline at end of file diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/RedisList.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/RedisList.java index abc99369a..f68cc441e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/RedisList.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/RedisList.java @@ -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 extends RedisStore, List, BlockingQueue { +public interface RedisList extends RedisStore, List, Deque { List range(long start, long end);