ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jdk8/java/util/AbstractQueue.java
Revision: 1.1
Committed: Sat Mar 26 06:22:49 2016 UTC (8 years, 1 month ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Log Message:
fork jdk8 maintenance branch for source and jtreg tests

File Contents

# User Rev Content
1 jsr166 1.1 /*
2     * Written by Doug Lea with assistance from members of JCP JSR-166
3     * Expert Group and released to the public domain, as explained at
4     * http://creativecommons.org/publicdomain/zero/1.0/
5     */
6    
7     package java.util;
8    
9     /**
10     * This class provides skeletal implementations of some {@link Queue}
11     * operations. The implementations in this class are appropriate when
12     * the base implementation does <em>not</em> allow {@code null}
13     * elements. Methods {@link #add add}, {@link #remove remove}, and
14     * {@link #element element} are based on {@link #offer offer}, {@link
15     * #poll poll}, and {@link #peek peek}, respectively, but throw
16     * exceptions instead of indicating failure via {@code false} or
17     * {@code null} returns.
18     *
19     * <p>A {@code Queue} implementation that extends this class must
20     * minimally define a method {@link Queue#offer} which does not permit
21     * insertion of {@code null} elements, along with methods {@link
22     * Queue#peek}, {@link Queue#poll}, {@link Collection#size}, and
23     * {@link Collection#iterator}. Typically, additional methods will be
24     * overridden as well. If these requirements cannot be met, consider
25     * instead subclassing {@link AbstractCollection}.
26     *
27     * <p>This class is a member of the
28     * <a href="{@docRoot}/../technotes/guides/collections/index.html">
29     * Java Collections Framework</a>.
30     *
31     * @since 1.5
32     * @author Doug Lea
33     * @param <E> the type of elements held in this queue
34     */
35     public abstract class AbstractQueue<E>
36     extends AbstractCollection<E>
37     implements Queue<E> {
38    
39     /**
40     * Constructor for use by subclasses.
41     */
42     protected AbstractQueue() {
43     }
44    
45     /**
46     * Inserts the specified element into this queue if it is possible to do so
47     * immediately without violating capacity restrictions, returning
48     * {@code true} upon success and throwing an {@code IllegalStateException}
49     * if no space is currently available.
50     *
51     * <p>This implementation returns {@code true} if {@code offer} succeeds,
52     * else throws an {@code IllegalStateException}.
53     *
54     * @param e the element to add
55     * @return {@code true} (as specified by {@link Collection#add})
56     * @throws IllegalStateException if the element cannot be added at this
57     * time due to capacity restrictions
58     * @throws ClassCastException if the class of the specified element
59     * prevents it from being added to this queue
60     * @throws NullPointerException if the specified element is null and
61     * this queue does not permit null elements
62     * @throws IllegalArgumentException if some property of this element
63     * prevents it from being added to this queue
64     */
65     public boolean add(E e) {
66     if (offer(e))
67     return true;
68     else
69     throw new IllegalStateException("Queue full");
70     }
71    
72     /**
73     * Retrieves and removes the head of this queue. This method differs
74     * from {@link #poll poll} only in that it throws an exception if this
75     * queue is empty.
76     *
77     * <p>This implementation returns the result of {@code poll}
78     * unless the queue is empty.
79     *
80     * @return the head of this queue
81     * @throws NoSuchElementException if this queue is empty
82     */
83     public E remove() {
84     E x = poll();
85     if (x != null)
86     return x;
87     else
88     throw new NoSuchElementException();
89     }
90    
91     /**
92     * Retrieves, but does not remove, the head of this queue. This method
93     * differs from {@link #peek peek} only in that it throws an exception if
94     * this queue is empty.
95     *
96     * <p>This implementation returns the result of {@code peek}
97     * unless the queue is empty.
98     *
99     * @return the head of this queue
100     * @throws NoSuchElementException if this queue is empty
101     */
102     public E element() {
103     E x = peek();
104     if (x != null)
105     return x;
106     else
107     throw new NoSuchElementException();
108     }
109    
110     /**
111     * Removes all of the elements from this queue.
112     * The queue will be empty after this call returns.
113     *
114     * <p>This implementation repeatedly invokes {@link #poll poll} until it
115     * returns {@code null}.
116     */
117     public void clear() {
118     while (poll() != null)
119     ;
120     }
121    
122     /**
123     * Adds all of the elements in the specified collection to this
124     * queue. Attempts to addAll of a queue to itself result in
125     * {@code IllegalArgumentException}. Further, the behavior of
126     * this operation is undefined if the specified collection is
127     * modified while the operation is in progress.
128     *
129     * <p>This implementation iterates over the specified collection,
130     * and adds each element returned by the iterator to this
131     * queue, in turn. A runtime exception encountered while
132     * trying to add an element (including, in particular, a
133     * {@code null} element) may result in only some of the elements
134     * having been successfully added when the associated exception is
135     * thrown.
136     *
137     * @param c collection containing elements to be added to this queue
138     * @return {@code true} if this queue changed as a result of the call
139     * @throws ClassCastException if the class of an element of the specified
140     * collection prevents it from being added to this queue
141     * @throws NullPointerException if the specified collection contains a
142     * null element and this queue does not permit null elements,
143     * or if the specified collection is null
144     * @throws IllegalArgumentException if some property of an element of the
145     * specified collection prevents it from being added to this
146     * queue, or if the specified collection is this queue
147     * @throws IllegalStateException if not all the elements can be added at
148     * this time due to insertion restrictions
149     * @see #add(Object)
150     */
151     public boolean addAll(Collection<? extends E> c) {
152     if (c == null)
153     throw new NullPointerException();
154     if (c == this)
155     throw new IllegalArgumentException();
156     boolean modified = false;
157     for (E e : c)
158     if (add(e))
159     modified = true;
160     return modified;
161     }
162    
163     }