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 * Base class for all broadcast iterators. For speed, there are public members. Note, index is not updated 014 */ 015public abstract class BroadcastIteratorBase extends IndexIterator { 016 017 /** 018 * Index in first dataset 019 */ 020 public int aIndex; 021 /** 022 * Index in second dataset 023 */ 024 public int bIndex; 025 /** 026 * Current value in second dataset 027 */ 028 public double bDouble; 029 /** 030 * Current value in second dataset 031 */ 032 public long bLong; 033 034 protected boolean asDouble = true; 035 protected boolean read = true; 036 037 protected int[] maxShape; 038 039 /** 040 * position in dataset 041 */ 042 protected int[] pos; 043 044 protected Dataset aDataset; 045 protected Dataset bDataset; 046 047 public BroadcastIteratorBase(Dataset a, Dataset b) { 048 aDataset = a; 049 bDataset = b; 050 } 051 052 @Override 053 public int[] getShape() { 054 return maxShape; 055 } 056 057 @Override 058 public int[] getPos() { 059 return pos; 060 } 061 062 /** 063 * @return true if output from iterator is double 064 */ 065 public boolean isOutputDouble() { 066 return asDouble; 067 } 068 069 /** 070 * Set to output doubles 071 * @param asDouble 072 */ 073 public void setOutputDouble(boolean asDouble) { 074 if (this.asDouble != asDouble) { 075 this.asDouble = asDouble; 076 storeCurrentValues(); 077 } 078 } 079 080 /** 081 * Read and store current values 082 */ 083 abstract protected void storeCurrentValues(); 084 085}