GitHub Viewer
/**
* Copyright (c) Rich Hickey. All rights reserved.
* The use and distribution terms for this software are covered by the
* Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
* which can be found in the file epl-v10.html at the root of this distribution.
* By using this software in any fashion, you are agreeing to be bound by
* the terms of this license.
* You must not remove this notice, or any other, from this software.
**/
package clojure.lang;
import java.lang.reflect.Array;
import java.util.Iterator;
public class ArrayIter implements Iterator {
final Object[] array;
int i;
static public Iterator EMPTY_ITERATOR = new Iterator() {
public boolean hasNext() { return false; }
public Object next() { throw new java.util.NoSuchElementException(); }
public void remove() { throw new UnsupportedOperationException("remove() not supported"); }
};
static public Iterator create(){
return EMPTY_ITERATOR;
}
static public Iterator create(Object... array){
if(array == null || array.length == 0)
return EMPTY_ITERATOR;
return new ArrayIter(array, 0);
}
static public Iterator createFromObject(Object array){
if(array == null || Array.getLength(array) == 0)
return EMPTY_ITERATOR;
Class aclass = array.getClass();
if(aclass == int[].class)
return new ArrayIter_int((int[]) array, 0);
if(aclass == float[].class)
return new ArrayIter_float((float[]) array, 0);
if(aclass == double[].class)
return new ArrayIter_double((double[]) array, 0);
if(aclass == long[].class)
return new ArrayIter_long((long[]) array, 0);
if(aclass == byte[].class)
return new ArrayIter_byte((byte[]) array, 0);
if(aclass == char[].class)
return new ArrayIter_char((char[]) array, 0);
if(aclass == short[].class)
return new ArrayIter_short((short[]) array, 0);
if(aclass == boolean[].class)
return new ArrayIter_boolean((boolean[]) array, 0);
return new ArrayIter(array, 0);
}
ArrayIter(Object array, int i){
this.i = i;
this.array = (Object[]) array;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Object next() {
if(array != null && i < array.length)
return array[i++];
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
//////////////////////////////////// specialized primitive versions ///////////////////////////////
static public class ArrayIter_int implements Iterator {
final int[] array;
int i;
ArrayIter_int(int[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Long next() {
if(array != null && i < array.length)
return Long.valueOf(array[i++]);
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_float implements Iterator {
final float[] array;
int i;
ArrayIter_float(float[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Double next() {
if(array != null && i < array.length)
return Double.valueOf(array[i++]);
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_double implements Iterator {
final double[] array;
int i;
ArrayIter_double(double[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Double next() {
if(array != null && i < array.length)
return array[i++];
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_long implements Iterator {
final long[] array;
int i;
ArrayIter_long(long[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Long next() {
if(array != null && i < array.length)
return Long.valueOf(array[i++]);
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_byte implements Iterator {
final byte[] array;
int i;
ArrayIter_byte(byte[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Byte next() {
if(array != null && i < array.length)
return array[i++];
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_char implements Iterator {
final char[] array;
int i;
ArrayIter_char(char[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Character next() {
if(array != null && i < array.length)
return array[i++];
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_short implements Iterator {
final short[] array;
int i;
ArrayIter_short(short[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Long next() {
if(array != null && i < array.length)
return Long.valueOf(array[i++]);
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
static public class ArrayIter_boolean implements Iterator {
final boolean[] array;
int i;
ArrayIter_boolean(boolean[] array, int i){
this.array = array;
this.i = i;
}
public boolean hasNext() {
return array != null && i < array.length;
}
public Boolean next() {
if(array != null && i < array.length)
return Boolean.valueOf(array[i++]);
throw new java.util.NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException("remove() not supported");
}
}
}