/* | |
******************************************************************************* | |
* Copyright (C) 2014, International Business Machines Corporation and * | |
* others. All Rights Reserved. * | |
******************************************************************************* | |
*/ | |
package com.ibm.icu.impl; | |
import java.util.Collection; | |
import java.util.Iterator; | |
import java.util.LinkedList; | |
import java.util.ListIterator; | |
import java.util.NoSuchElementException; | |
/** | |
* Thin wrapper of java.util.LinkedList implementing Java 6 Deque on | |
* Java 5 runtime environment. This class might be removed when the minimum | |
* Java runtime version is updated to 6 or later. | |
*/ | |
public class Deque<E> { | |
private LinkedList<E> ll = new LinkedList<E>(); | |
public Deque() { | |
} | |
public boolean isEmpty() { | |
return ll.isEmpty(); | |
} | |
public Object[] toArray() { | |
return ll.toArray(); | |
} | |
public <T> T[] toArray(T[] a) { | |
return ll.toArray(a); | |
} | |
public boolean containsAll(Collection<?> c) { | |
return ll.containsAll(c); | |
} | |
public boolean addAll(Collection<? extends E> c) { | |
return ll.addAll(c); | |
} | |
public boolean removeAll(Collection<?> c) { | |
return ll.removeAll(c); | |
} | |
public boolean retainAll(Collection<?> c) { | |
return ll.retainAll(c); | |
} | |
public void clear() { | |
ll.clear(); | |
} | |
public void addFirst(E e) { | |
ll.addFirst(e); | |
} | |
public void addLast(E e) { | |
ll.addLast(e); | |
} | |
public boolean offerFirst(E e) { | |
ll.addFirst(e); | |
return true; | |
} | |
public boolean offerLast(E e) { | |
ll.addLast(e); | |
return true; | |
} | |
public E removeFirst() { | |
return ll.removeFirst(); | |
} | |
public E removeLast() { | |
return ll.removeLast(); | |
} | |
public E pollFirst() { | |
return ll.poll(); | |
} | |
public E pollLast() { | |
E e; | |
try { | |
e = ll.removeLast(); | |
} catch (NoSuchElementException ex) { | |
// ignore the exception and return null | |
e = null; | |
} | |
return e; | |
} | |
public E getFirst() { | |
return ll.getFirst(); | |
} | |
public E getLast() { | |
return ll.getLast(); | |
} | |
public E peekFirst() { | |
return ll.peek(); | |
} | |
public E peekLast() { | |
E e; | |
try { | |
e = ll.getLast(); | |
} catch (NoSuchElementException ex) { | |
// ignore the exception and return null | |
e = null; | |
} | |
return e; | |
} | |
public boolean removeFirstOccurrence(Object o) { | |
return ll.remove(o); | |
} | |
public boolean removeLastOccurrence(Object o) { | |
ListIterator<E> litr = ll.listIterator(ll.size()); | |
while (litr.hasPrevious()) { | |
E e = litr.previous(); | |
if ((o == null && e == null) || (o != null && o.equals(e))) { | |
litr.remove(); | |
return true; | |
} | |
} | |
return false; | |
} | |
public boolean add(E e) { | |
return ll.add(e); | |
} | |
public boolean offer(E e) { | |
return ll.offer(e); | |
} | |
public E remove() { | |
return ll.remove(); | |
} | |
public E poll() { | |
return ll.poll(); | |
} | |
public E element() { | |
return ll.element(); | |
} | |
public E peek() { | |
return ll.peek(); | |
} | |
public void push(E e) { | |
ll.addFirst(e); | |
} | |
public E pop() { | |
return ll.removeFirst(); | |
} | |
public boolean remove(Object o) { | |
return ll.remove(o); | |
} | |
public boolean contains(Object o) { | |
return ll.contains(o); | |
} | |
public int size() { | |
return ll.size(); | |
} | |
public Iterator<E> iterator() { | |
return ll.iterator(); | |
} | |
public Iterator<E> descendingIterator() { | |
return new DescendingIterator(); | |
} | |
private class DescendingIterator implements Iterator<E> { | |
private ListIterator<E> litr; | |
DescendingIterator() { | |
litr = ll.listIterator(ll.size()); | |
} | |
/* (non-Javadoc) | |
* @see java.util.Iterator#hasNext() | |
*/ | |
public boolean hasNext() { | |
return litr.hasPrevious(); | |
} | |
/* (non-Javadoc) | |
* @see java.util.Iterator#next() | |
*/ | |
public E next() { | |
return litr.previous(); | |
} | |
/* (non-Javadoc) | |
* @see java.util.Iterator#remove() | |
*/ | |
public void remove() { | |
litr.remove(); | |
} | |
} | |
} |