001/*-
002 *******************************************************************************
003 * Copyright (c) 2011, 2016 Diamond Light Source Ltd.
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *    Peter Chang - initial API and implementation and/or initial documentation
011 *******************************************************************************/
012
013package org.eclipse.january.dataset;
014
015/**
016 * Class to run over an integer dataset and return its items
017 */
018public class IntegerIterator extends IndexIterator {
019        final private IntegerDataset indices;
020        final private IndexIterator iter;
021        final private int istep; // step over items
022        final private int imax; // maximum index in array
023
024        /**
025         * Constructor for an iterator over the items of an integer dataset
026         *
027         * @param index integer dataset
028         * @param length of entire data array
029         */
030        public IntegerIterator(final Dataset index, final int length) {
031                this(index, length, 1);
032        }
033
034        /**
035         * Constructor for an iterator over the items of an integer dataset
036         * 
037         * @param index integer dataset
038         * @param length of entire data array
039         * @param isize number of elements in an item
040         */
041        public IntegerIterator(final Dataset index, final int length, final int isize) {
042                indices = (IntegerDataset) (index instanceof IntegerDataset ? index : DatasetUtils.convertToDataset(index).cast(Dataset.INT32));
043                iter = index.getIterator();
044                istep = isize;
045                imax = length*istep;
046        }
047
048        @Override
049        public boolean hasNext() {
050                while (iter.hasNext()) {
051                        index = istep*indices.getAbs(iter.index);
052                        if (index < 0) {
053                                index += imax;
054                        }
055                        return true;
056                }
057                return false;
058        }
059
060        @Override
061        public int[] getPos() {
062                return null;
063        }
064
065        @Override
066        public void reset() {
067                iter.reset();
068        }
069}