KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > polyglot > util > ConcatenatedIterator


1 /*
2  * ConcatenatedIterator.java
3  */

4
5 package polyglot.util;
6
7 import java.util.Iterator JavaDoc;
8
9 /**
10  * ConcatenatedIterator
11  *
12  * Overview:
13  * This iterator wraps other iterators, and returns all their elements
14  * in order.
15  *
16  * Does not support Remove.
17  **/

18 public final class ConcatenatedIterator implements Iterator JavaDoc {
19   /**
20    * Constructs a new ConcatenatedIterator which yields all of the
21    * elements of <iter1>, followed by all the elements of <iter2>.
22    **/

23   public ConcatenatedIterator(Iterator JavaDoc iter1, Iterator JavaDoc iter2) {
24     this(new Iterator JavaDoc[]{iter1, iter2});
25   }
26
27   /**
28    * Constructs a new ConcatenatedIterator which yields every element, in
29    * order, of every element of the array iters, in order.
30    **/

31   public ConcatenatedIterator(Iterator JavaDoc[] iters) {
32     this.backing_iterators = (Iterator JavaDoc[]) iters.clone();
33     findNextItem();
34   }
35
36   /**
37    * Constructs a new ConcatenatedIterator which yields every element, in
38    * order, of every element of the collection iters, in order.
39    **/

40   public ConcatenatedIterator(java.util.Collection JavaDoc iters) {
41     this.backing_iterators = (Iterator JavaDoc[])iters.toArray(new Iterator JavaDoc[0]);
42     findNextItem();
43   }
44
45   public Object JavaDoc next() {
46     Object JavaDoc res = next_item;
47     if (res == null)
48       throw new java.util.NoSuchElementException JavaDoc();
49     findNextItem();
50     return res;
51   }
52
53   public boolean hasNext() {
54     return next_item != null;
55   }
56   
57   public void remove() {
58     throw new UnsupportedOperationException JavaDoc("ConcatenatedIterator.remove");
59   }
60
61   // Advances the internal iterator.
62
private void findNextItem() {
63     while(index < backing_iterators.length) {
64       Iterator JavaDoc it = backing_iterators[index];
65       if (it.hasNext()) {
66     next_item = it.next();
67     return;
68       } else {
69     index++;
70       }
71     }
72     next_item = null;
73   }
74   
75   // AF: if next_item==null, this iterator has no more elts to yield.
76
// otherwise, this iterator will yield next_item, followed by the
77
// remaining elements of backing_iterators[index], followed by the
78
// elements of backing_iterators[index+1]...
79
Object JavaDoc next_item;
80   Iterator JavaDoc[] backing_iterators;
81   int index;
82 }
83
84
85
Popular Tags