ArrayIterable.java

package edu.udel.cis.vsl.sarl.util;

import java.util.Iterator;

/**
 * Simple implementation of {@link Iterable} backed by an array. Assumes the
 * array will not be modified, else all bets are off.
 * 
 * @author siegel
 *
 * @param <T>
 *            element type
 */
public class ArrayIterable<T> implements Iterable<T> {

	private T[] a;

	private int length;

	public ArrayIterable(T[] a) {
		this.a = a;
		this.length = a.length;
	}

	private class ArrayIterator implements Iterator<T> {
		private int nextIndex = 0;

		@Override
		public boolean hasNext() {
			return nextIndex < length;
		}

		@Override
		public T next() {
			T result = a[nextIndex];

			nextIndex++;
			return result;
		}
	}

	@Override
	public Iterator<T> iterator() {
		return new ArrayIterator();
	}
}