    001/*-
    002 * Copyright 2016 Diamond Light Source Ltd.
    003 *
    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
    010package org.eclipse.january.dataset;
    011
    012/**
    013 * Class to run over a pair of contiguous datasets with only the second dataset read
    014 */
    015public class ContiguousSingleIterator extends BroadcastSelfIterator {
    016        private final int aMax; // maximum index in array
    017        private final int aStep; // step over items
    018        private final int bStep;
    019
    020        public ContiguousSingleIterator(Dataset a, Dataset b) {
    021                super(a, b);
    022                aStep = a.getElementsPerItem();
    023                aMax = a.getSize() * aStep;
    024                bStep = b.getElementsPerItem();
    025                maxShape = a.getShape();
    026                asDouble = aDataset.hasFloatingPointElements();
    027                reset();
    028        }
    029
    030        @Override
    031        public boolean hasNext() {
    032                aIndex += aStep;
    033                bIndex += bStep;
    034
    035                if (aIndex >= aMax) {
    036                        return false;
    037                }
    038                if (read) {
    039                        if (asDouble) {
    040                                bDouble = bDataset.getElementDoubleAbs(bIndex);
    041                        } else {
    042                                bLong = bDataset.getElementLongAbs(bIndex);
    043                        }
    044                }
    045                return true;
    046        }
    047
    048        @Override
    049        public int[] getPos() {
    050                return null;
    051        }
    052
    053        @Override
    054        public void reset() {
    055                aIndex = -aStep;
    056                bIndex = -bStep;
    057                if (read) {
    058                        storeCurrentValues();
    059                }
    060        }
    061}