/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira
 */
package net.ranides.assira.collection.list;

/**
 * Klasa abstrakcyjna wygodna do implementowania iteratora przeglądającego
 * kolekcje tylko do odczytu. Szczególnie wygodna przy pisaniu delegatorów,
 * które nie muszą koncentrować się na implementacji logiki iteratora.
 * @param <T>
 * @author ranides
 */
public abstract class ImmutableListIterator<T> extends AbstractListIterator<T> {

    private  static final String LIST_IS_IMMUTABLE = "list is immutable.";

    /**
     * Tworzy iterator wskazujący na podaną pozycję w liście.
     * @param index
     */
    public ImmutableListIterator(int index) {
        super(index);
    }

    /**
     * Tworzy iterator wskazujący na początek listy.
     */
    public ImmutableListIterator() {
        super();
    }

    @Override
    protected final void remove(int index) {
        throw new UnsupportedOperationException(LIST_IS_IMMUTABLE);
    }

    @Override
    protected final void add(int index, T value) {
        throw new UnsupportedOperationException(LIST_IS_IMMUTABLE);
    }

    @Override
    protected final void set(int index, T value) {
        throw new UnsupportedOperationException(LIST_IS_IMMUTABLE);
    }

}
