PreIndexedContentIterator.java
- package no.motif.iter;
- /**
- * Base implementation for iterating over elements retrieved using an
- * incrementing index, where the start and end indexes are known beforehand.
- * E.g. characters of a String, or elements of an array.
- */
- public abstract class PreIndexedContentIterator<T> extends ReadOnlyIterator<T> {
- private final int endIndex;
- private int next;
- /**
- * @param endIndex The end index, exclusively.
- */
- public PreIndexedContentIterator(int endIndex) {
- this(0, endIndex);
- }
- /**
- * @param startIndex The first index, inclusively
- * @param endIndex The end index, exclusively.
- */
- public PreIndexedContentIterator(int startIndex, int endIndex) {
- if (endIndex < startIndex) throw new IllegalArgumentException(
- "endIndex must be same or more than startIndex. startIndex=" + startIndex + ", endIndex=" + endIndex);
- this.next = startIndex;
- this.endIndex = endIndex;
- }
- @Override
- public final boolean hasNext() {
- return next < endIndex;
- }
- @Override
- public final T next() {
- if (hasNext()) return elementAt(next++);
- else throw new IndexOutOfBoundsException(String.valueOf(next));
- }
- /**
- *
- * @param index The index of the element to yield. Guarantied to never
- * be out of bounds with respect to the start and end indexes.
- * E.g. if the given start and end indexes are 0 and 4, this
- * method will be called for each of the indexes 0, 1, 2, and 3.
- *
- * @return The element for the given index.
- */
- protected abstract T elementAt(int index);
- }