OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [external/] [jsr166/] [java/] [util/] [Deque.java] - Blame information for rev 768

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 768 jeremybenn
/*
2
 * Written by Doug Lea and Josh Bloch with assistance from members of
3
 * JCP JSR-166 Expert Group and released to the public domain, as explained
4
 * at http://creativecommons.org/licenses/publicdomain
5
 */
6
 
7
package java.util;
8
 
9
/**
10
 * A linear collection that supports element insertion and removal at
11
 * both ends.  The name <i>deque</i> is short for "double ended queue"
12
 * and is usually pronounced "deck".  Most <tt>Deque</tt>
13
 * implementations place no fixed limits on the number of elements
14
 * they may contain, but this interface supports capacity-restricted
15
 * deques as well as those with no fixed size limit.
16
 *
17
 * <p>This interface defines methods to access the elements at both
18
 * ends of the deque.  Methods are provided to insert, remove, and
19
 * examine the element.  Each of these methods exists in two forms:
20
 * one throws an exception if the operation fails, the other returns a
21
 * special value (either <tt>null</tt> or <tt>false</tt>, depending on
22
 * the operation).  The latter form of the insert operation is
23
 * designed specifically for use with capacity-restricted
24
 * <tt>Deque</tt> implementations; in most implementations, insert
25
 * operations cannot fail.
26
 *
27
 * <p>The twelve methods described above are summarized in the
28
 * following table:
29
 *
30
 * <p>
31
 * <table BORDER CELLPADDING=3 CELLSPACING=1>
32
 *  <tr>
33
 *    <td></td>
34
 *    <td ALIGN=CENTER COLSPAN = 2> <b>First Element (Head)</b></td>
35
 *    <td ALIGN=CENTER COLSPAN = 2> <b>Last Element (Tail)</b></td>
36
 *  </tr>
37
 *  <tr>
38
 *    <td></td>
39
 *    <td ALIGN=CENTER><em>Throws exception</em></td>
40
 *    <td ALIGN=CENTER><em>Special value</em></td>
41
 *    <td ALIGN=CENTER><em>Throws exception</em></td>
42
 *    <td ALIGN=CENTER><em>Special value</em></td>
43
 *  </tr>
44
 *  <tr>
45
 *    <td><b>Insert</b></td>
46
 *    <td>{@link #addFirst addFirst(e)}</td>
47
 *    <td>{@link #offerFirst offerFirst(e)}</td>
48
 *    <td>{@link #addLast addLast(e)}</td>
49
 *    <td>{@link #offerLast offerLast(e)}</td>
50
 *  </tr>
51
 *  <tr>
52
 *    <td><b>Remove</b></td>
53
 *    <td>{@link #removeFirst removeFirst()}</td>
54
 *    <td>{@link #pollFirst pollFirst()}</td>
55
 *    <td>{@link #removeLast removeLast()}</td>
56
 *    <td>{@link #pollLast pollLast()}</td>
57
 *  </tr>
58
 *  <tr>
59
 *    <td><b>Examine</b></td>
60
 *    <td>{@link #getFirst getFirst()}</td>
61
 *    <td>{@link #peekFirst peekFirst()}</td>
62
 *    <td>{@link #getLast getLast()}</td>
63
 *    <td>{@link #peekLast peekLast()}</td>
64
 *  </tr>
65
 * </table>
66
 *
67
 * <p>This interface extends the {@link Queue} interface.  When a deque is
68
 * used as a queue, FIFO (First-In-First-Out) behavior results.  Elements are
69
 * added at the end of the deque and removed from the beginning.  The methods
70
 * inherited from the <tt>Queue</tt> interface are precisely equivalent to
71
 * <tt>Deque</tt> methods as indicated in the following table:
72
 *
73
 * <p>
74
 * <table BORDER CELLPADDING=3 CELLSPACING=1>
75
 *  <tr>
76
 *    <td ALIGN=CENTER> <b><tt>Queue</tt> Method</b></td>
77
 *    <td ALIGN=CENTER> <b>Equivalent <tt>Deque</tt> Method</b></td>
78
 *  </tr>
79
 *  <tr>
80
 *    <td>{@link java.util.Queue#add add(e)}</td>
81
 *    <td>{@link #addLast addLast(e)}</td>
82
 *  </tr>
83
 *  <tr>
84
 *    <td>{@link java.util.Queue#offer offer(e)}</td>
85
 *    <td>{@link #offerLast offerLast(e)}</td>
86
 *  </tr>
87
 *  <tr>
88
 *    <td>{@link java.util.Queue#remove remove()}</td>
89
 *    <td>{@link #removeFirst removeFirst()}</td>
90
 *  </tr>
91
 *  <tr>
92
 *    <td>{@link java.util.Queue#poll poll()}</td>
93
 *    <td>{@link #pollFirst pollFirst()}</td>
94
 *  </tr>
95
 *  <tr>
96
 *    <td>{@link java.util.Queue#element element()}</td>
97
 *    <td>{@link #getFirst getFirst()}</td>
98
 *  </tr>
99
 *  <tr>
100
 *    <td>{@link java.util.Queue#peek peek()}</td>
101
 *    <td>{@link #peek peekFirst()}</td>
102
 *  </tr>
103
 * </table>
104
 *
105
 * <p>Deques can also be used as LIFO (Last-In-First-Out) stacks.  This
106
 * interface should be used in preference to the legacy {@link Stack} class.
107
 * When a deque is used as a stack, elements are pushed and popped from the
108
 * beginning of the deque.  Stack methods are precisely equivalent to
109
 * <tt>Deque</tt> methods as indicated in the table below:
110
 *
111
 * <p>
112
 * <table BORDER CELLPADDING=3 CELLSPACING=1>
113
 *  <tr>
114
 *    <td ALIGN=CENTER> <b>Stack Method</b></td>
115
 *    <td ALIGN=CENTER> <b>Equivalent <tt>Deque</tt> Method</b></td>
116
 *  </tr>
117
 *  <tr>
118
 *    <td>{@link #push push(e)}</td>
119
 *    <td>{@link #addFirst addFirst(e)}</td>
120
 *  </tr>
121
 *  <tr>
122
 *    <td>{@link #pop pop()}</td>
123
 *    <td>{@link #removeFirst removeFirst()}</td>
124
 *  </tr>
125
 *  <tr>
126
 *    <td>{@link #peek peek()}</td>
127
 *    <td>{@link #peekFirst peekFirst()}</td>
128
 *  </tr>
129
 * </table>
130
 *
131
 * <p>Note that the {@link #peek peek} method works equally well when
132
 * a deque is used as a queue or a stack; in either case, elements are
133
 * drawn from the beginning of the deque.
134
 *
135
 * <p>This interface provides two methods to remove interior
136
 * elements, {@link #removeFirstOccurrence removeFirstOccurrence} and
137
 * {@link #removeLastOccurrence removeLastOccurrence}.
138
 *
139
 * <p>Unlike the {@link List} interface, this interface does not
140
 * provide support for indexed access to elements.
141
 *
142
 * <p>While <tt>Deque</tt> implementations are not strictly required
143
 * to prohibit the insertion of null elements, they are strongly
144
 * encouraged to do so.  Users of any <tt>Deque</tt> implementations
145
 * that do allow null elements are strongly encouraged <i>not</i> to
146
 * take advantage of the ability to insert nulls.  This is so because
147
 * <tt>null</tt> is used as a special return value by various methods
148
 * to indicated that the deque is empty.
149
 *
150
 * <p><tt>Deque</tt> implementations generally do not define
151
 * element-based versions of the <tt>equals</tt> and <tt>hashCode</tt>
152
 * methods, but instead inherit the identity-based versions from class
153
 * <tt>Object</tt>.
154
 *
155
 * <p>This interface is a member of the <a
156
 * href="{@docRoot}/../technotes/guides/collections/index.html"> Java Collections
157
 * Framework</a>.
158
 *
159
 * @author Doug Lea
160
 * @author Josh Bloch
161
 * @since  1.6
162
 * @param <E> the type of elements held in this collection
163
 */
164
 
165
public interface Deque<E> extends Queue<E> {
166
    /**
167
     * Inserts the specified element at the front of this deque if it is
168
     * possible to do so immediately without violating capacity restrictions.
169
     * When using a capacity-restricted deque, it is generally preferable to
170
     * use method {@link #offerFirst}.
171
     *
172
     * @param e the element to add
173
     * @throws IllegalStateException if the element cannot be added at this
174
     *         time due to capacity restrictions
175
     * @throws ClassCastException if the class of the specified element
176
     *         prevents it from being added to this deque
177
     * @throws NullPointerException if the specified element is null and this
178
     *         deque does not permit null elements
179
     * @throws IllegalArgumentException if some property of the specified
180
     *         element prevents it from being added to this deque
181
     */
182
    void addFirst(E e);
183
 
184
    /**
185
     * Inserts the specified element at the end of this deque if it is
186
     * possible to do so immediately without violating capacity restrictions.
187
     * When using a capacity-restricted deque, it is generally preferable to
188
     * use method {@link #offerLast}.
189
     *
190
     * <p>This method is equivalent to {@link #add}.
191
     *
192
     * @param e the element to add
193
     * @throws IllegalStateException if the element cannot be added at this
194
     *         time due to capacity restrictions
195
     * @throws ClassCastException if the class of the specified element
196
     *         prevents it from being added to this deque
197
     * @throws NullPointerException if the specified element is null and this
198
     *         deque does not permit null elements
199
     * @throws IllegalArgumentException if some property of the specified
200
     *         element prevents it from being added to this deque
201
     */
202
    void addLast(E e);
203
 
204
    /**
205
     * Inserts the specified element at the front of this deque unless it would
206
     * violate capacity restrictions.  When using a capacity-restricted deque,
207
     * this method is generally preferable to the {@link #addFirst} method,
208
     * which can fail to insert an element only by throwing an exception.
209
     *
210
     * @param e the element to add
211
     * @return <tt>true</tt> if the element was added to this deque, else
212
     *         <tt>false</tt>
213
     * @throws ClassCastException if the class of the specified element
214
     *         prevents it from being added to this deque
215
     * @throws NullPointerException if the specified element is null and this
216
     *         deque does not permit null elements
217
     * @throws IllegalArgumentException if some property of the specified
218
     *         element prevents it from being added to this deque
219
     */
220
    boolean offerFirst(E e);
221
 
222
    /**
223
     * Inserts the specified element at the end of this deque unless it would
224
     * violate capacity restrictions.  When using a capacity-restricted deque,
225
     * this method is generally preferable to the {@link #addLast} method,
226
     * which can fail to insert an element only by throwing an exception.
227
     *
228
     * @param e the element to add
229
     * @return <tt>true</tt> if the element was added to this deque, else
230
     *         <tt>false</tt>
231
     * @throws ClassCastException if the class of the specified element
232
     *         prevents it from being added to this deque
233
     * @throws NullPointerException if the specified element is null and this
234
     *         deque does not permit null elements
235
     * @throws IllegalArgumentException if some property of the specified
236
     *         element prevents it from being added to this deque
237
     */
238
    boolean offerLast(E e);
239
 
240
    /**
241
     * Retrieves and removes the first element of this deque.  This method
242
     * differs from {@link #pollFirst pollFirst} only in that it throws an
243
     * exception if this deque is empty.
244
     *
245
     * @return the head of this deque
246
     * @throws NoSuchElementException if this deque is empty
247
     */
248
    E removeFirst();
249
 
250
    /**
251
     * Retrieves and removes the last element of this deque.  This method
252
     * differs from {@link #pollLast pollLast} only in that it throws an
253
     * exception if this deque is empty.
254
     *
255
     * @return the tail of this deque
256
     * @throws NoSuchElementException if this deque is empty
257
     */
258
    E removeLast();
259
 
260
    /**
261
     * Retrieves and removes the first element of this deque,
262
     * or returns <tt>null</tt> if this deque is empty.
263
     *
264
     * @return the head of this deque, or <tt>null</tt> if this deque is empty
265
     */
266
    E pollFirst();
267
 
268
    /**
269
     * Retrieves and removes the last element of this deque,
270
     * or returns <tt>null</tt> if this deque is empty.
271
     *
272
     * @return the tail of this deque, or <tt>null</tt> if this deque is empty
273
     */
274
    E pollLast();
275
 
276
    /**
277
     * Retrieves, but does not remove, the first element of this deque.
278
     *
279
     * This method differs from {@link #peekFirst peekFirst} only in that it
280
     * throws an exception if this deque is empty.
281
     *
282
     * @return the head of this deque
283
     * @throws NoSuchElementException if this deque is empty
284
     */
285
    E getFirst();
286
 
287
    /**
288
     * Retrieves, but does not remove, the last element of this deque.
289
     * This method differs from {@link #peekLast peekLast} only in that it
290
     * throws an exception if this deque is empty.
291
     *
292
     * @return the tail of this deque
293
     * @throws NoSuchElementException if this deque is empty
294
     */
295
    E getLast();
296
 
297
    /**
298
     * Retrieves, but does not remove, the first element of this deque,
299
     * or returns <tt>null</tt> if this deque is empty.
300
     *
301
     * @return the head of this deque, or <tt>null</tt> if this deque is empty
302
     */
303
    E peekFirst();
304
 
305
    /**
306
     * Retrieves, but does not remove, the last element of this deque,
307
     * or returns <tt>null</tt> if this deque is empty.
308
     *
309
     * @return the tail of this deque, or <tt>null</tt> if this deque is empty
310
     */
311
    E peekLast();
312
 
313
    /**
314
     * Removes the first occurrence of the specified element from this deque.
315
     * If the deque does not contain the element, it is unchanged.
316
     * More formally, removes the first element <tt>e</tt> such that
317
     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>
318
     * (if such an element exists).
319
     * Returns <tt>true</tt> if this deque contained the specified element
320
     * (or equivalently, if this deque changed as a result of the call).
321
     *
322
     * @param o element to be removed from this deque, if present
323
     * @return <tt>true</tt> if an element was removed as a result of this call
324
     * @throws ClassCastException if the class of the specified element
325
     *         is incompatible with this deque (optional)
326
     * @throws NullPointerException if the specified element is null and this
327
     *         deque does not permit null elements (optional)
328
     */
329
    boolean removeFirstOccurrence(Object o);
330
 
331
    /**
332
     * Removes the last occurrence of the specified element from this deque.
333
     * If the deque does not contain the element, it is unchanged.
334
     * More formally, removes the last element <tt>e</tt> such that
335
     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>
336
     * (if such an element exists).
337
     * Returns <tt>true</tt> if this deque contained the specified element
338
     * (or equivalently, if this deque changed as a result of the call).
339
     *
340
     * @param o element to be removed from this deque, if present
341
     * @return <tt>true</tt> if an element was removed as a result of this call
342
     * @throws ClassCastException if the class of the specified element
343
     *         is incompatible with this deque (optional)
344
     * @throws NullPointerException if the specified element is null and this
345
     *         deque does not permit null elements (optional)
346
     */
347
    boolean removeLastOccurrence(Object o);
348
 
349
    // *** Queue methods ***
350
 
351
    /**
352
     * Inserts the specified element into the queue represented by this deque
353
     * (in other words, at the tail of this deque) if it is possible to do so
354
     * immediately without violating capacity restrictions, returning
355
     * <tt>true</tt> upon success and throwing an
356
     * <tt>IllegalStateException</tt> if no space is currently available.
357
     * When using a capacity-restricted deque, it is generally preferable to
358
     * use {@link #offer(Object) offer}.
359
     *
360
     * <p>This method is equivalent to {@link #addLast}.
361
     *
362
     * @param e the element to add
363
     * @return <tt>true</tt> (as specified by {@link Collection#add})
364
     * @throws IllegalStateException if the element cannot be added at this
365
     *         time due to capacity restrictions
366
     * @throws ClassCastException if the class of the specified element
367
     *         prevents it from being added to this deque
368
     * @throws NullPointerException if the specified element is null and this
369
     *         deque does not permit null elements
370
     * @throws IllegalArgumentException if some property of the specified
371
     *         element prevents it from being added to this deque
372
     */
373
    boolean add(E e);
374
 
375
    /**
376
     * Inserts the specified element into the queue represented by this deque
377
     * (in other words, at the tail of this deque) if it is possible to do so
378
     * immediately without violating capacity restrictions, returning
379
     * <tt>true</tt> upon success and <tt>false</tt> if no space is currently
380
     * available.  When using a capacity-restricted deque, this method is
381
     * generally preferable to the {@link #add} method, which can fail to
382
     * insert an element only by throwing an exception.
383
     *
384
     * <p>This method is equivalent to {@link #offerLast}.
385
     *
386
     * @param e the element to add
387
     * @return <tt>true</tt> if the element was added to this deque, else
388
     *         <tt>false</tt>
389
     * @throws ClassCastException if the class of the specified element
390
     *         prevents it from being added to this deque
391
     * @throws NullPointerException if the specified element is null and this
392
     *         deque does not permit null elements
393
     * @throws IllegalArgumentException if some property of the specified
394
     *         element prevents it from being added to this deque
395
     */
396
    boolean offer(E e);
397
 
398
    /**
399
     * Retrieves and removes the head of the queue represented by this deque
400
     * (in other words, the first element of this deque).
401
     * This method differs from {@link #poll poll} only in that it throws an
402
     * exception if this deque is empty.
403
     *
404
     * <p>This method is equivalent to {@link #removeFirst()}.
405
     *
406
     * @return the head of the queue represented by this deque
407
     * @throws NoSuchElementException if this deque is empty
408
     */
409
    E remove();
410
 
411
    /**
412
     * Retrieves and removes the head of the queue represented by this deque
413
     * (in other words, the first element of this deque), or returns
414
     * <tt>null</tt> if this deque is empty.
415
     *
416
     * <p>This method is equivalent to {@link #pollFirst()}.
417
     *
418
     * @return the first element of this deque, or <tt>null</tt> if
419
     *         this deque is empty
420
     */
421
    E poll();
422
 
423
    /**
424
     * Retrieves, but does not remove, the head of the queue represented by
425
     * this deque (in other words, the first element of this deque).
426
     * This method differs from {@link #peek peek} only in that it throws an
427
     * exception if this deque is empty.
428
     *
429
     * <p>This method is equivalent to {@link #getFirst()}.
430
     *
431
     * @return the head of the queue represented by this deque
432
     * @throws NoSuchElementException if this deque is empty
433
     */
434
    E element();
435
 
436
    /**
437
     * Retrieves, but does not remove, the head of the queue represented by
438
     * this deque (in other words, the first element of this deque), or
439
     * returns <tt>null</tt> if this deque is empty.
440
     *
441
     * <p>This method is equivalent to {@link #peekFirst()}.
442
     *
443
     * @return the head of the queue represented by this deque, or
444
     *         <tt>null</tt> if this deque is empty
445
     */
446
    E peek();
447
 
448
 
449
    // *** Stack methods ***
450
 
451
    /**
452
     * Pushes an element onto the stack represented by this deque (in other
453
     * words, at the head of this deque) if it is possible to do so
454
     * immediately without violating capacity restrictions, returning
455
     * <tt>true</tt> upon success and throwing an
456
     * <tt>IllegalStateException</tt> if no space is currently available.
457
     *
458
     * <p>This method is equivalent to {@link #addFirst}.
459
     *
460
     * @param e the element to push
461
     * @throws IllegalStateException if the element cannot be added at this
462
     *         time due to capacity restrictions
463
     * @throws ClassCastException if the class of the specified element
464
     *         prevents it from being added to this deque
465
     * @throws NullPointerException if the specified element is null and this
466
     *         deque does not permit null elements
467
     * @throws IllegalArgumentException if some property of the specified
468
     *         element prevents it from being added to this deque
469
     */
470
    void push(E e);
471
 
472
    /**
473
     * Pops an element from the stack represented by this deque.  In other
474
     * words, removes and returns the first element of this deque.
475
     *
476
     * <p>This method is equivalent to {@link #removeFirst()}.
477
     *
478
     * @return the element at the front of this deque (which is the top
479
     *         of the stack represented by this deque)
480
     * @throws NoSuchElementException if this deque is empty
481
     */
482
    E pop();
483
 
484
 
485
    // *** Collection methods ***
486
 
487
    /**
488
     * Removes the first occurrence of the specified element from this deque.
489
     * If the deque does not contain the element, it is unchanged.
490
     * More formally, removes the first element <tt>e</tt> such that
491
     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>
492
     * (if such an element exists).
493
     * Returns <tt>true</tt> if this deque contained the specified element
494
     * (or equivalently, if this deque changed as a result of the call).
495
     *
496
     * <p>This method is equivalent to {@link #removeFirstOccurrence}.
497
     *
498
     * @param o element to be removed from this deque, if present
499
     * @return <tt>true</tt> if an element was removed as a result of this call
500
     * @throws ClassCastException if the class of the specified element
501
     *         is incompatible with this deque (optional)
502
     * @throws NullPointerException if the specified element is null and this
503
     *         deque does not permit null elements (optional)
504
     */
505
    boolean remove(Object o);
506
 
507
    /**
508
     * Returns <tt>true</tt> if this deque contains the specified element.
509
     * More formally, returns <tt>true</tt> if and only if this deque contains
510
     * at least one element <tt>e</tt> such that
511
     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
512
     *
513
     * @param o element whose presence in this deque is to be tested
514
     * @return <tt>true</tt> if this deque contains the specified element
515
     * @throws ClassCastException if the type of the specified element
516
     *         is incompatible with this deque (optional)
517
     * @throws NullPointerException if the specified element is null and this
518
     *         deque does not permit null elements (optional)
519
     */
520
    boolean contains(Object o);
521
 
522
    /**
523
     * Returns the number of elements in this deque.
524
     *
525
     * @return the number of elements in this deque
526
     */
527
    public int size();
528
 
529
    /**
530
     * Returns an iterator over the elements in this deque in proper sequence.
531
     * The elements will be returned in order from first (head) to last (tail).
532
     *
533
     * @return an iterator over the elements in this deque in proper sequence
534
     */
535
    Iterator<E> iterator();
536
 
537
    /**
538
     * Returns an iterator over the elements in this deque in reverse
539
     * sequential order.  The elements will be returned in order from
540
     * last (tail) to first (head).
541
     *
542
     * @return an iterator over the elements in this deque in reverse
543
     * sequence
544
     */
545
    Iterator<E> descendingIterator();
546
 
547
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.