View Javadoc

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.ByteUtils;
21  import org.joda.primitives.iterator.ByteIterator;
22  
23  /**
24   * An iterator over an array of <code>byte</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 ArrayByteIterator implements ByteIterator {
38      // This file is CODE GENERATED. Do not change manually.
39  
40      /** The array to iterate over */
41      protected final byte[] array;
42      /** Cursor position */
43      protected int cursor = 0;
44  
45      /**
46       * Creates an iterator over a copy of an array of <code>byte</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 ArrayByteIterator copyOf(byte[] array) {
55          if (array == null) {
56              throw new IllegalArgumentException("Array must not be null");
57          }
58          return new ArrayByteIterator(array.clone());
59      }
60  
61      /**
62       * Constructs an iterator over an array of <code>byte</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 ArrayByteIterator(byte[] 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 byte nextByte() {
94          if (hasNext() == false) {
95              throw new NoSuchElementException("No more elements available");
96          }
97          return array[cursor++];
98      }
99  
100     public Byte next() {
101         return ByteUtils.toObject(nextByte());
102     }
103 
104     public void remove() {
105         throw new UnsupportedOperationException("ArrayByteIterator does not support remove");
106     }
107 
108     public void reset() {
109         cursor = 0;
110     }
111 
112 }