1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl.util;
18
19
20
21 import java.util.Iterator;
22 import java.util.NoSuchElementException;
23 import java.lang.reflect.Array;
24
25
26 /***
27 * <p>
28 * An Iterator wrapper for an Object[]. This will
29 * allow us to deal with all array like structures
30 * in a consistent manner.
31 * </p>
32 * <p>
33 * WARNING : this class's operations are NOT synchronized.
34 * It is meant to be used in a single thread, newly created
35 * for each use in the #foreach() directive.
36 * If this is used or shared, synchronize in the
37 * next() method.
38 * </p>
39 *
40 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
41 * @author <a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a>
42 * @version $Id: ArrayIterator.java,v 1.3 2004/02/28 13:45:21 yoavs Exp $
43 */
44 public class ArrayIterator implements Iterator
45 {
46 /***
47 * The objects to iterate.
48 */
49 private Object array;
50
51 /***
52 * The current position and size in the array.
53 */
54 private int pos;
55 private int size;
56
57 /***
58 * Creates a new iterator instance for the specified array.
59 *
60 * @param array The array for which an iterator is desired.
61 */
62 public ArrayIterator(Object array)
63 {
64
65
66
67
68
69
70 if ( !array.getClass().isArray() )
71 {
72 throw new IllegalArgumentException(
73 "Programmer error : internal ArrayIterator invoked w/o array");
74 }
75
76 this.array = array;
77 pos = 0;
78 size = Array.getLength( this.array );
79 }
80
81 /***
82 * Move to next element in the array.
83 *
84 * @return The next object in the array.
85 */
86 public Object next()
87 {
88 if (pos < size )
89 return Array.get( array, pos++);
90
91
92
93
94
95 throw new NoSuchElementException("No more elements: " + pos +
96 " / " + size);
97 }
98
99 /***
100 * Check to see if there is another element in the array.
101 *
102 * @return Whether there is another element.
103 */
104 public boolean hasNext()
105 {
106 return (pos < size );
107 }
108
109 /***
110 * No op--merely added to satify the <code>Iterator</code> interface.
111 */
112 public void remove()
113 {
114 throw new UnsupportedOperationException();
115 }
116 }