    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 bMax; // maximum index in array
    019        private final int bStep;
    020
    021        public ContiguousSingleIterator(Dataset a, Dataset b) {
    022                super(a, b);
    023                aStep = a.getElementsPerItem();
    024                aMax = a.getSize() * aStep;
    025                bStep = b.getElementsPerItem();
    026                bMax = b.getSize() * bStep;
    027                maxShape = a.getShape();
    028                asDouble = aDataset.hasFloatingPointElements();
    029                reset();
    030        }
    031
    032        @Override
    033        public boolean hasNext() {
    034                aIndex += aStep;
    035                bIndex += bStep;
    036
    037                if (aIndex >= aMax || bIndex >= bMax) {
    038                        return false;
    039                }
    040                if (read) {
    041                        if (asDouble) {
    042                                bDouble = bDataset.getElementDoubleAbs(bIndex);
    043                        } else {
    044                                bLong = bDataset.getElementLongAbs(bIndex);
    045                        }
    046                }
    047                return true;
    048        }
    049
    050        @Override
    051        public int[] getPos() {
    052                return null;
    053        }
    054
    055        @Override
    056        public void reset() {
    057                aIndex = -aStep;
    058                bIndex = -bStep;
    059                if (read) {
    060                        storeCurrentValues();
    061                }
    062        }
    063}