/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.internal; import java.util.Iterator; import java.util.NoSuchElementException; /** * Abstract {@link Iterator} base class */ public abstract class SimpleIterator<E> implements Iterator<E> { private E next; /** * Returns the next element or {@code null} if the iterator is drained. * * @return the next element or {@code null} */ protected abstract E findNext(); @Override public final boolean hasNext() { if (next == null) { next = findNext(); } return next != null; } @Override public final E next() { if (!hasNext()) { throw new NoSuchElementException(); } E next = this.next; this.next = null; return next; } @Override public final void remove() { throw new UnsupportedOperationException(); } }