1 /*
2 * Copyright 2001-2010 Stephen Colebourne
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.joda.primitives.iterator.impl;
17
18 import java.util.NoSuchElementException;
19
20 import org.joda.primitives.CharUtils;
21 import org.joda.primitives.iterator.CharIterator;
22
23 /**
24 * An iterator over an array of <code>char</code> values.
25 * <p>
26 * This class implements {@link java.util.Iterator Iterator} allowing
27 * seamless integration with other APIs.
28 * <p>
29 * The iterator can be reset to the start if required.
30 * It is unmodifiable and <code>remove()</code> is unsupported.
31 *
32 * @author Stephen Colebourne
33 * @author Jason Tiscione
34 * @version CODE GENERATED
35 * @since 1.0
36 */
37 public class ArrayCharIterator implements CharIterator {
38 // This file is CODE GENERATED. Do not change manually.
39
40 /** The array to iterate over */
41 protected final char[] array;
42 /** Cursor position */
43 protected int cursor = 0;
44
45 /**
46 * Creates an iterator over a copy of an array of <code>char</code> values.
47 * <p>
48 * The specified array is copied, making this class effectively immutable.
49 * Note that the class is not {@code final} thus it is not truly immutable.
50 *
51 * @param array the array to iterate over, must not be null
52 * @throws IllegalArgumentException if the array is null
53 */
54 public static ArrayCharIterator copyOf(char[] array) {
55 if (array == null) {
56 throw new IllegalArgumentException("Array must not be null");
57 }
58 return new ArrayCharIterator(array.clone());
59 }
60
61 /**
62 * Constructs an iterator over an array of <code>char</code> values.
63 * <p>
64 * The array is assigned internally, thus the caller holds a reference to
65 * the internal state of the returned iterator. It is not recommended to
66 * modify the state of the array after construction.
67 *
68 * @param array the array to iterate over, must not be null
69 * @throws IllegalArgumentException if the array is null
70 */
71 public ArrayCharIterator(char[] array) {
72 super();
73 if (array == null) {
74 throw new IllegalArgumentException("Array must not be null");
75 }
76 this.array = array;
77 }
78
79 //-----------------------------------------------------------------------
80 public boolean isModifiable() {
81 return false;
82 }
83
84 public boolean isResettable() {
85 return true;
86 }
87
88 //-----------------------------------------------------------------------
89 public boolean hasNext() {
90 return (cursor < array.length);
91 }
92
93 public char nextChar() {
94 if (hasNext() == false) {
95 throw new NoSuchElementException("No more elements available");
96 }
97 return array[cursor++];
98 }
99
100 public Character next() {
101 return CharUtils.toObject(nextChar());
102 }
103
104 public void remove() {
105 throw new UnsupportedOperationException("ArrayCharIterator does not support remove");
106 }
107
108 public void reset() {
109 cursor = 0;
110 }
111
112 }