| /* |
| ******************************************************************************* |
| * 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(); |
| } |
| |
| } |
| } |