package aud.exam.prep.array;

import aud.exam.prep.SequenceProcessor;

abstract class FullyUsedArrayProcessor<T> implements SequenceProcessor<T, FullyUsedArray<T>> {

    @Override
    public boolean overrideAt(FullyUsedArray<T> array, T to, int index) {
        if (index < 0 || index >= array.theArray.length) {
            return false;
        }

        array.theArray[index] = to;
        return true;
    }

    @Override
    public boolean check(FullyUsedArray<T> array) {
        return true;
    }

    @Override
    public Iterable<T> iterate(FullyUsedArray<T> array) {
        return () ->
            new ArrayIterator<>(array.theArray, 0, array.theArray.length);
    }
}