SlicedNDIterator.java

package neureka.ndim.iterator.types.sliced;

import neureka.ndim.config.NDConfiguration;
import neureka.ndim.iterator.NDIterator;

public final class SlicedNDIterator implements NDIterator
{
    private final int[] _indices;
    private final int[] _shape;
    private final NDConfiguration _conf;

    public SlicedNDIterator( NDConfiguration ndc ) {
        _shape = ndc.shape();
        _indices = new int[ _shape.length ];
        _conf = ndc;
    }

    /** {@inheritDoc} */
    @Override public final int shape( int i ) { return _shape[i]; }

    /** {@inheritDoc} */
    @Override public final int[] shape() { return _shape; }

    /** {@inheritDoc} */
    @Override public final void increment() { NDConfiguration.Utility.increment( _indices, _shape ); }

    /** {@inheritDoc} */
    @Override public final void decrement() { NDConfiguration.Utility.decrement( _indices, _shape ); }

    /** {@inheritDoc} */
    @Override public final int i() { return _conf.indexOfIndices(_indices); }

    /** {@inheritDoc} */
    @Override public final int get( int axis ) { return _indices[ axis ]; }

    @Override
    public final int[] get() { return _indices; }

    @Override
    public final void set( int axis, int position ) { _indices[ axis ] = position; }

    @Override
    public final void set( int[] indices ) { System.arraycopy( indices, 0, _indices, 0, indices.length ); }

    @Override
    public final int rank() { return _shape.length; }



}