2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.util;
10 import com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
12 import java.util.AbstractQueue;
13 import java.util.Collections;
14 import java.util.Deque;
15 import java.util.Iterator;
16 import java.util.Spliterator;
17 import java.util.Spliterators;
18 import org.opendaylight.yangtools.concepts.Immutable;
21 * A specialized always-empty implementation of {@link java.util.Deque}. This implementation will always refuse new
22 * elements in its {@link #offer(Object)} method.
24 * @author Robert Varga
26 * @param <E> the type of elements held in this collection
29 public final class EmptyDeque<E> extends AbstractQueue<E> implements Deque<E>, Immutable {
30 private static final EmptyDeque<?> INSTANCE = new EmptyDeque<>();
31 private static final Object[] EMPTY_ARRAY = new Object[0];
33 private EmptyDeque() {
37 @SuppressWarnings("unchecked")
38 public static <T> EmptyDeque<T> instance() {
39 return (EmptyDeque<T>) INSTANCE;
43 public boolean offer(final E entry) {
48 public boolean offerFirst(final E e) {
53 public boolean offerLast(final E e) {
63 public E pollFirst() {
78 public E peekFirst() {
88 public Iterator<E> iterator() {
89 return Collections.emptyIterator();
93 public Spliterator<E> spliterator() {
94 return Spliterators.emptySpliterator();
103 public Object[] toArray() {
108 public <T> T[] toArray(final T[] a) {
109 return Preconditions.checkNotNull(a);
113 public void addFirst(final E e) {
118 public void addLast(final E e) {
123 public E removeFirst() {
128 public E removeLast() {
133 public E getFirst() {
143 public boolean removeFirstOccurrence(final Object o) {
148 public boolean removeLastOccurrence(final Object o) {
153 public void push(final E e) {
159 return removeFirst();
163 public Iterator<E> descendingIterator() {
164 return Collections.emptyIterator();