Package ucar.ma2

Class Array

java.lang.Object
ucar.ma2.Array
Direct Known Subclasses:
ArrayBoolean, ArrayByte, ArrayChar, ArrayDouble, ArrayFloat, ArrayInt, ArrayLong, ArrayObject, ArrayRagged, ArrayScalar, ArrayShort, ArrayString, ArrayStructure

public abstract class Array extends Object
Superclass for implementations of multidimensional arrays. An Array has a classType which gives the Class of its elements, and a shape which describes the number of elements in each index. The rank is the number of indices. A scalar Array has rank = 0. An Array may have arbitrary rank. The Array size is the total number of elements, which must be less than 2^31 (about 2x10^9).

Actual data storage is done with Java 1D arrays and stride index calculations. This makes our Arrays rectangular, i.e. no "ragged arrays" where different elements can have different lengths as in Java multidimensional arrays, which are arrays of arrays.

Each primitive Java type (boolean, byte, char, short, int, long, float, double) has a corresponding concrete implementation, e.g. ArrayBoolean, ArrayDouble. Reference types are all implemented using the ArrayObject class, with the exceptions of the reference types that correspond to the primitive types, eg Double.class is mapped to double.class.

For efficiency, each Array type implementation has concrete subclasses for ranks 0-7, eg ArrayDouble.D0 is a double array of rank 0, ArrayDouble.D1 is a double array of rank 1, etc. These type and rank specific classes are convenient to work with when you know the type and rank of the Array. Ranks greater than 7 are handled by the type-specific superclass e.g. ArrayDouble. The Array class itself is used for fully general handling of any type and rank array. Use the Array.factory() methods to create Arrays in a general way.

The stride index calculations allow logical views to be efficiently implemented, eg subset, transpose, slice, etc. These views use the same data storage as the original Array they are derived from. The index stride calculations are equally efficient for any composition of logical views.

The type, shape and backing storage of an Array are immutable. The data itself is read or written using an Index or an IndexIterator, which stores any needed state information for efficient traversal. This makes use of Arrays thread-safe (as long as you don't share the Index or IndexIterator) except for the possibility of non-atomic read/write on long/doubles. If this is the case, you should probably synchronize your calls. Presumably 64-bit CPUs will make those operations atomic also.

See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    arraycopy(Array arraySrc, int srcPos, Array arrayDst, int dstPos, int len)
    Cover for System.arraycopy().
    Create a copy of this Array, copying the data so that physical order is the same as logical order
    Copy this array to a 1D Java primitive array of type getElementType(), with the physical order of the result the same as logical order.
    Copy this array to an n-Dimensional Java primitive array of type getElementType() and rank getRank().
    static Array
    factory(DataType dataType, int[] shape)
    Generate new Array with given dataType and shape and zeroed storage.
    static Array
    factory(DataType dataType, int[] shape, Object storage)
    Generate new Array with given dataType, shape, storage.
    static Array
    factory(DataType dtype, int[] shape, ByteBuffer bb)
    Create an Array from a ByteBuffer
    static Array
    factory(DataType dtype, Index index, Object storage)
     
    static Array
    factoryConstant(DataType dtype, int[] shape, Object storage)
    Generate new Array with given type and shape and an Index that always return 0.
    static Array
    factoryCopy(DataType dataType, int[] shape, List<Array> arrays)
    Combine list of Arrays by copying the underlying Arrays into a single primitive array
    flip(int dim)
    Create a new Array using same backing store as this Array, by flipping the index so that it runs from shape[index]-1 to 0.
    Deprecated.
    use get1DJavaArray(DataType wantType)
    This gets the equivalent java array of the wanted type, in correct order.
    abstract boolean
    getBoolean(int elem)
     
    abstract boolean
    Get the array element at the current element of ima, as a boolean.
    abstract byte
    getByte(int elem)
     
    abstract byte
    Get the array element at the current element of ima, as a byte.
    abstract char
    getChar(int elem)
     
    abstract char
    Get the array element at the current element of ima, as a char.
    This gets the data as a ByteBuffer, in correct order.
    getDataAsByteBuffer(int capacity, ByteOrder order)
     
     
    Return the computed datatype for this array
    abstract double
    getDouble(int elem)
     
    abstract double
    Get the array element at the current element of ima, as a double.
    abstract Class
    Get the element class type of this Array
    abstract float
    getFloat(int elem)
     
    abstract float
    Get the array element at the current element of ima, as a float.
    Get an Index object used for indexed access of this Array.
    Get an index iterator for traversing the array in canonical order.
    abstract int
    getInt(int elem)
     
    abstract int
    Get the array element at the current element of ima, as a int.
    abstract long
    getLong(int elem)
     
    abstract long
    Get the array element at the current element of ima, as a long.
    abstract Object
    getObject(int elem)
     
    abstract Object
    Get the array element at index as an Object.
    Get an index iterator for traversing a section of the array in canonical order.
    int
    Get the number of dimensions of the array.
    int[]
    Get the shape: length of array in each dimension.
    abstract short
    getShort(int elem)
     
    abstract short
    Get the array element at the current element of ima, as a short.
    long
    Get the total number of elements in the array.
    long
    Get the total number of bytes in the array.
    abstract Object
    Get underlying primitive array storage.
    boolean
    Check if more elements in the local iterator.
    boolean
    If this is a constant array
    boolean
    Find whether the underlying data should be interpreted as unsigned.
    boolean
     
    static Array
    makeArray(DataType dtype, int npts, double start, double incr)
    Make a 1D array from a start and incr.
    static Array
    makeArray(DataType dtype, String[] stringValues)
    Make an 1D array from an array of strings.
    static Array
    makeArray(DataType dtype, List<String> stringValues)
    Make an 1D array from a list of strings.
    static Array
    Add extra outermost dimension with len = 1.
    static Array
     
    static Array
    makeFromJavaArray(Object javaArray, boolean isUnsigned)
    Generate a new Array from a java array of any rank and type.
    static Array
    makeObjectArray(DataType dtype, Class classType, int[] shape, Object storage)
    Generate new Array with given type, shape, storage.
    static Array
    makeVlenArray(int[] shape, Array[] storage)
    Make a vlen array
    Return the next object in the local iterator.
    boolean
    Return the next boolean in the local iterator.
    byte
    Return the next byte in the local iterator.
    char
    Return the next char in the local iterator.
    double
    Return the next double in the local iterator.
    float
    Return the next float in the local iterator.
    int
    Return the next int in the local iterator.
    long
    Return the next long in the local iterator.
    short
    Return the next short in the local iterator.
    permute(int[] dims)
    Create a new Array using same backing store as this Array, by permuting the indices.
    Create a new Array using same backing store as this Array, by eliminating any dimensions with length one.
    reduce(int dim)
    Create a new Array using same backing store as this Array, by eliminating the specified dimension.
    void
    Reset the local iterator.
    reshape(int[] shape)
    Create a new Array by copying this Array to a new one with given shape
    reshapeNoCopy(int[] shape)
    Reshape this array without copying data
    section(int[] origin, int[] shape)
    Create a new Array as a subsection of this Array, with rank reduction.
    section(int[] origin, int[] shape, int[] stride)
    Create a new Array as a subsection of this Array, with rank reduction.
    section(List<Range> ranges)
    Create a new Array as a subsection of this Array, with rank reduction.
    sectionNoReduce(int[] origin, int[] shape, int[] stride)
    Create a new Array as a subsection of this Array, without rank reduction.
    Create a new Array as a subsection of this Array, without rank reduction.
    abstract void
    setBoolean(int elem, boolean value)
     
    abstract void
    setBoolean(Index ima, boolean value)
    Set the array element at the current element of ima.
    abstract void
    setByte(int elem, byte value)
     
    abstract void
    setByte(Index ima, byte value)
    Set the array element at the current element of ima.
    abstract void
    setChar(int elem, char value)
     
    abstract void
    setChar(Index ima, char value)
    Set the array element at the current element of ima.
    abstract void
    setDouble(int elem, double val)
     
    abstract void
    setDouble(Index ima, double value)
    Set the array element at the current element of ima.
    abstract void
    setFloat(int elem, float val)
     
    abstract void
    setFloat(Index ima, float value)
    Set the array element at the current element of ima.
    abstract void
    setInt(int elem, int value)
     
    abstract void
    setInt(Index ima, int value)
    Set the array element at the current element of ima.
    abstract void
    setLong(int elem, long value)
     
    abstract void
    setLong(Index ima, long value)
    Set the array element at the current element of ima.
    abstract void
    setObject(int elem, Object value)
     
    abstract void
    setObject(Index ima, Object value)
    Set the array element at index to the specified value.
    abstract void
    setShort(int elem, short value)
     
    abstract void
    setShort(Index ima, short value)
    Set the array element at the current element of ima.
    Create a string representation of the shape of this Array.
    slice(int dim, int value)
    Create a new Array using same backing store as this Array, by fixing the specified dimension at the specified index value.
     
    transpose(int dim1, int dim2)
    Create a new Array using same backing store as this Array, by transposing two of the indices.

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Method Details

    • factory

      public static Array factory(DataType dataType, int[] shape)
      Generate new Array with given dataType and shape and zeroed storage.
      Parameters:
      dataType - instance of DataType.
      shape - shape of the array.
      Returns:
      new Array or Array.D if 0 <= rank <= 7.
    • factory

      public static Array factory(DataType dataType, int[] shape, Object storage)
      Generate new Array with given dataType, shape, storage.
      Parameters:
      dataType - DataType, eg DataType.DOUBLE.
      shape - shape of the array.
      storage - primitive array of correct type
      Returns:
      new Array or Array.D if 0 <= rank <= 7.
      Throws:
      ClassCastException - wrong storage type
    • factory

      public static Array factory(DataType dtype, Index index, Object storage)
    • makeVlenArray

      public static Array makeVlenArray(int[] shape, @Nonnull Array[] storage)
      Make a vlen array
      Parameters:
      shape - the outer shape, ie excluding the vlen dimension
      storage - must be an Array type. must not be null
      Returns:
      ArrayObject
    • makeObjectArray

      public static Array makeObjectArray(DataType dtype, Class classType, int[] shape, Object storage)
      Generate new Array with given type, shape, storage. This should be package private, but is exposed for efficiency. Normally use factory( Class classType, int [] shape) instead. storage must be 1D array of type classType. storage.length must equal product of shapes storage data needs to be in canonical order
      Parameters:
      classType - element class type, eg double.class. Corresponding Object types like Double.class are mapped to double.class. Any reference types use ArrayObject.
      shape - array shape
      storage - 1D java array of type classType, except object types like Double.class are mapped to their corresponding primitive type, eg double.class.
      Returns:
      Array of given type, shape and storage
      Throws:
      IllegalArgumentException - storage.length != product of shapes
      ClassCastException - wrong storage type
    • factoryConstant

      public static Array factoryConstant(DataType dtype, int[] shape, Object storage)
      Generate new Array with given type and shape and an Index that always return 0.
      Parameters:
      dtype - data type
      shape - shape of the array.
      storage - primitive array of correct type of length 1
      Returns:
      new Array or Array.D if 0 <= rank <= 7.
    • makeFromJavaArray

      public static Array makeFromJavaArray(Object javaArray)
    • makeFromJavaArray

      public static Array makeFromJavaArray(Object javaArray, boolean isUnsigned)
      Generate a new Array from a java array of any rank and type. This makes a COPY of the data values of javaArray of primitive type LOOK: not sure this works for reference types.
      Parameters:
      javaArray - scalar Object or a java array of any rank and type
      Returns:
      Array of the appropriate rank and type, with the data copied from javaArray.
    • arraycopy

      public static void arraycopy(Array arraySrc, int srcPos, Array arrayDst, int dstPos, int len)
      Cover for System.arraycopy(). Works with the underlying data arrays. ArraySrc and ArrayDst must be the same primitive type. Exposed for efficiency; use at your own risk.
      Parameters:
      arraySrc - copy from here : if not in canonical order, an extra copy will be done
      srcPos - starting at
      arrayDst - copy to here : must be in canonical order
      dstPos - starting at
      len - number of elements to copy
    • makeArray

      public static Array makeArray(DataType dtype, int npts, double start, double incr)
      Make a 1D array from a start and incr.
      Parameters:
      dtype - data type of result. must be convertible to double.
      npts - number of points
      start - starting values
      incr - increment
      Returns:
      1D array
    • makeArray

      public static Array makeArray(DataType dtype, List<String> stringValues) throws NumberFormatException
      Make an 1D array from a list of strings.
      Parameters:
      dtype - data type of the array.
      stringValues - list of strings.
      Returns:
      resulting 1D array.
      Throws:
      NumberFormatException - if string values not parseable to specified data type
    • makeArray

      public static Array makeArray(DataType dtype, String[] stringValues) throws NumberFormatException
      Make an 1D array from an array of strings.
      Parameters:
      dtype - data type of the array. Assumed unsigned
      stringValues - list of strings.
      Returns:
      resulting 1D array.
      Throws:
      NumberFormatException - if string values not parseable to specified data type
    • makeArrayRankPlusOne

      public static Array makeArrayRankPlusOne(Array org)
      Add extra outermost dimension with len = 1.
      Parameters:
      org - original array
      Returns:
      rank1 array of rank + 1
    • factoryCopy

      public static Array factoryCopy(DataType dataType, int[] shape, List<Array> arrays)
      Combine list of Arrays by copying the underlying Arrays into a single primitive array
      Parameters:
      dataType - the DataType
      shape - the shape of the combined array
      arrays - non-empty list of arrays of the same dataType to combine
      Returns:
      a new Array containing data from the arrays
      Throws:
      IllegalArgumentException - if arrays is empty or if it contains ArrayStructures with different Members
    • getDataType

      public DataType getDataType()
      Return the computed datatype for this array
      Returns:
      the data type
    • getIndex

      public Index getIndex()
      Get an Index object used for indexed access of this Array.
      Returns:
      an Index for this Array
      See Also:
    • getIndexIterator

      public IndexIterator getIndexIterator()
      Get an index iterator for traversing the array in canonical order.
      Returns:
      an IndexIterator for this Array
      See Also:
    • getRank

      public int getRank()
      Get the number of dimensions of the array.
      Returns:
      number of dimensions of the array
    • getShape

      public int[] getShape()
      Get the shape: length of array in each dimension.
      Returns:
      array whose length is the rank of this Array and whose elements represent the length of each of its indices.
    • getSize

      public long getSize()
      Get the total number of elements in the array.
      Returns:
      total number of elements in the array
    • getSizeBytes

      public long getSizeBytes()
      Get the total number of bytes in the array.
      Returns:
      total number of bytes in the array
    • getRangeIterator

      public IndexIterator getRangeIterator(List<Range> ranges) throws InvalidRangeException
      Get an index iterator for traversing a section of the array in canonical order. This is equivalent to Array.section(ranges).getIterator();
      Parameters:
      ranges - list of Ranges that specify the array subset. Must be same rank as original Array. A particular Range: 1) may be a subset, or 2) may be null, meaning use entire Range.
      Returns:
      an IndexIterator over the named range.
      Throws:
      InvalidRangeException - if ranges is invalid
    • getElementType

      public abstract Class getElementType()
      Get the element class type of this Array
      Returns:
      the class of the element
    • getStorage

      public abstract Object getStorage()
      Get underlying primitive array storage. Exposed for efficiency, use at your own risk.
      Returns:
      underlying primitive array storage
    • section

      public Array section(List<Range> ranges) throws InvalidRangeException
      Create a new Array as a subsection of this Array, with rank reduction. No data is moved, so the new Array references the same backing store as the original.
      Parameters:
      ranges - list of Ranges that specify the array subset. Must be same rank as original Array. A particular Range: 1) may be a subset, or 2) may be null, meaning use entire Range. If Range[dim].length == 1, then the rank of the resulting Array is reduced at that dimension.
      Returns:
      the new Array
      Throws:
      InvalidRangeException - if ranges is invalid
    • section

      public Array section(int[] origin, int[] shape) throws InvalidRangeException
      Create a new Array as a subsection of this Array, with rank reduction. No data is moved, so the new Array references the same backing store as the original.

      Parameters:
      origin - int array specifying the starting index. Must be same rank as original Array.
      shape - int array specifying the extents in each dimension. This becomes the shape of the returned Array. Must be same rank as original Array. If shape[dim] == 1, then the rank of the resulting Array is reduced at that dimension.
      Returns:
      the new Array
      Throws:
      InvalidRangeException - if ranges is invalid
    • section

      public Array section(int[] origin, int[] shape, int[] stride) throws InvalidRangeException
      Create a new Array as a subsection of this Array, with rank reduction. No data is moved, so the new Array references the same backing store as the original.

      Parameters:
      origin - int array specifying the starting index. Must be same rank as original Array.
      shape - int array specifying the extents in each dimension. This becomes the shape of the returned Array. Must be same rank as original Array. If shape[dim] == 1, then the rank of the resulting Array is reduced at that dimension.
      stride - int array specifying the strides in each dimension. If null, assume all ones.
      Returns:
      the new Array
      Throws:
      InvalidRangeException - if ranges is invalid
    • sectionNoReduce

      public Array sectionNoReduce(List<Range> ranges) throws InvalidRangeException
      Create a new Array as a subsection of this Array, without rank reduction. No data is moved, so the new Array references the same backing store as the original. Vlen is transferred over unchanged.
      Parameters:
      ranges - list of Ranges that specify the array subset. Must be same rank as original Array. A particular Range: 1) may be a subset, or 2) may be null, meaning use entire Range.
      Returns:
      the new Array
      Throws:
      InvalidRangeException - if ranges is invalid
    • sectionNoReduce

      public Array sectionNoReduce(int[] origin, int[] shape, int[] stride) throws InvalidRangeException
      Create a new Array as a subsection of this Array, without rank reduction. No data is moved, so the new Array references the same backing store as the original.
      Parameters:
      origin - int array specifying the starting index. Must be same rank as original Array.
      shape - int array specifying the extents in each dimension. This becomes the shape of the returned Array. Must be same rank as original Array.
      stride - int array specifying the strides in each dimension. If null, assume all ones.
      Returns:
      the new Array
      Throws:
      InvalidRangeException - if ranges is invalid
    • slice

      public Array slice(int dim, int value)
      Create a new Array using same backing store as this Array, by fixing the specified dimension at the specified index value. This reduces rank by 1.
      Parameters:
      dim - which dimension to fix
      value - at what index value
      Returns:
      a new Array
    • copy

      public Array copy()
      Create a copy of this Array, copying the data so that physical order is the same as logical order
      Returns:
      the new Array
    • get1DJavaArray

      public Object get1DJavaArray(DataType wantType)
      This gets the equivalent java array of the wanted type, in correct order. It avoids copying if possible.
      Parameters:
      wantType - returned object will be an array of this type. This must be convertible to it.
      Returns:
      java array of type want
    • get1DJavaArray

      public Object get1DJavaArray(Class wantType)
      Deprecated.
      use get1DJavaArray(DataType wantType)
    • getDataAsByteBuffer

      public ByteBuffer getDataAsByteBuffer()
      This gets the data as a ByteBuffer, in correct order. It avoids copying if possible. Only for numeric types (byte, short, int, long, double, float)
      Returns:
      equivalent data in a ByteBuffer
    • getDataAsByteBuffer

      public ByteBuffer getDataAsByteBuffer(ByteOrder order)
    • getDataAsByteBuffer

      public ByteBuffer getDataAsByteBuffer(int capacity, ByteOrder order)
    • factory

      public static Array factory(DataType dtype, int[] shape, ByteBuffer bb)
      Create an Array from a ByteBuffer
      Parameters:
      dtype - type of data
      shape - shape of data; if null, then use int[]{bb.limit()}
      bb - data is in here
      Returns:
      equivilent Array
    • copyTo1DJavaArray

      public Object copyTo1DJavaArray()
      Copy this array to a 1D Java primitive array of type getElementType(), with the physical order of the result the same as logical order.
      Returns:
      a Java 1D array of type getElementType().
    • copyToNDJavaArray

      public Object copyToNDJavaArray()
      Copy this array to an n-Dimensional Java primitive array of type getElementType() and rank getRank(). Makes a copy of the data.
      Returns:
      a Java ND array of type getElementType().
    • flip

      public Array flip(int dim)
      Create a new Array using same backing store as this Array, by flipping the index so that it runs from shape[index]-1 to 0.
      Parameters:
      dim - dimension to flip
      Returns:
      the new Array
    • transpose

      public Array transpose(int dim1, int dim2)
      Create a new Array using same backing store as this Array, by transposing two of the indices.
      Parameters:
      dim1 - transpose these two indices
      dim2 - transpose these two indices
      Returns:
      the new Array
    • permute

      public Array permute(int[] dims)
      Create a new Array using same backing store as this Array, by permuting the indices.
      Parameters:
      dims - the old index dims[k] becomes the new kth index.
      Returns:
      the new Array
    • reshape

      public Array reshape(int[] shape)
      Create a new Array by copying this Array to a new one with given shape
      Parameters:
      shape - the new shape
      Returns:
      the new Array
      Throws:
      IllegalArgumentException - new shape is not conformable
    • reshapeNoCopy

      public Array reshapeNoCopy(int[] shape)
      Reshape this array without copying data
      Parameters:
      shape - the new shape
      Returns:
      the new Array, using same backing object
      Throws:
      IllegalArgumentException - new shape is not conformable
    • reduce

      public Array reduce()
      Create a new Array using same backing store as this Array, by eliminating any dimensions with length one.
      Returns:
      the new Array, or the same array if no reduction was done
    • reduce

      public Array reduce(int dim)
      Create a new Array using same backing store as this Array, by eliminating the specified dimension.
      Parameters:
      dim - dimension to eliminate: must be of length one, else IllegalArgumentException
      Returns:
      the new Array
    • isUnsigned

      public boolean isUnsigned()
      Find whether the underlying data should be interpreted as unsigned. Only affects byte, short, int, and long. When true, conversions to wider types are handled correctly.
      Returns:
      true if the data is an unsigned integer type.
    • isConstant

      public boolean isConstant()
      If this is a constant array
      Returns:
      If this is a constant array
    • isVlen

      public boolean isVlen()
    • getDouble

      public abstract double getDouble(Index ima)
      Get the array element at the current element of ima, as a double.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to double if necessary.
    • setDouble

      public abstract void setDouble(Index ima, double value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getFloat

      public abstract float getFloat(Index ima)
      Get the array element at the current element of ima, as a float.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to float if necessary.
    • setFloat

      public abstract void setFloat(Index ima, float value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getLong

      public abstract long getLong(Index ima)
      Get the array element at the current element of ima, as a long.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to long if necessary.
    • setLong

      public abstract void setLong(Index ima, long value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getInt

      public abstract int getInt(Index ima)
      Get the array element at the current element of ima, as a int.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to int if necessary.
    • setInt

      public abstract void setInt(Index ima, int value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getShort

      public abstract short getShort(Index ima)
      Get the array element at the current element of ima, as a short.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to short if necessary.
    • setShort

      public abstract void setShort(Index ima, short value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getByte

      public abstract byte getByte(Index ima)
      Get the array element at the current element of ima, as a byte.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to float if necessary.
    • setByte

      public abstract void setByte(Index ima, byte value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getChar

      public abstract char getChar(Index ima)
      Get the array element at the current element of ima, as a char.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to char if necessary.
    • setChar

      public abstract void setChar(Index ima, char value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
    • getBoolean

      public abstract boolean getBoolean(Index ima)
      Get the array element at the current element of ima, as a boolean.
      Parameters:
      ima - Index with current element set
      Returns:
      value at index cast to boolean if necessary.
      Throws:
      ForbiddenConversionException - if underlying array not boolean
    • setBoolean

      public abstract void setBoolean(Index ima, boolean value)
      Set the array element at the current element of ima.
      Parameters:
      ima - Index with current element set
      value - the new value; cast to underlying data type if necessary.
      Throws:
      ForbiddenConversionException - if underlying array not boolean
    • getObject

      public abstract Object getObject(Index ima)
      Get the array element at index as an Object. The returned value is wrapped in an object, eg Double for double
      Parameters:
      ima - element Index
      Returns:
      Object value at index
      Throws:
      ArrayIndexOutOfBoundsException - if index incorrect rank or out of bounds
    • setObject

      public abstract void setObject(Index ima, Object value)
      Set the array element at index to the specified value. the value must be passed wrapped in the appropriate Object (eg Double for double)
      Parameters:
      ima - Index with current element set
      value - the new value.
      Throws:
      ArrayIndexOutOfBoundsException - if index incorrect rank or out of bounds
      ClassCastException - if Object is incorrect type
    • getDouble

      public abstract double getDouble(int elem)
    • setDouble

      public abstract void setDouble(int elem, double val)
    • getFloat

      public abstract float getFloat(int elem)
    • setFloat

      public abstract void setFloat(int elem, float val)
    • getLong

      public abstract long getLong(int elem)
    • setLong

      public abstract void setLong(int elem, long value)
    • getInt

      public abstract int getInt(int elem)
    • setInt

      public abstract void setInt(int elem, int value)
    • getShort

      public abstract short getShort(int elem)
    • setShort

      public abstract void setShort(int elem, short value)
    • getByte

      public abstract byte getByte(int elem)
    • setByte

      public abstract void setByte(int elem, byte value)
    • getChar

      public abstract char getChar(int elem)
    • setChar

      public abstract void setChar(int elem, char value)
    • getBoolean

      public abstract boolean getBoolean(int elem)
    • setBoolean

      public abstract void setBoolean(int elem, boolean value)
    • getObject

      public abstract Object getObject(int elem)
    • setObject

      public abstract void setObject(int elem, Object value)
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • shapeToString

      public String shapeToString()
      Create a string representation of the shape of this Array.
      Returns:
      string representation of the shape
    • hasNext

      public boolean hasNext()
      Check if more elements in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety. You cannot call any of the array.nextXXX() methods without calling hasNext() first. If you are not sure of the state of the iterator, you must reset it before use. Example:
       arr.resetLocalIterator();
       while (arr.hasNext()) {
       double val = mdata.nextDouble();
       ..
       }
       
      Returns:
      true if there are more elements in the iteration
    • next

      public Object next()
      Return the next object in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as an Object, same as IndexIterator.getObjectNext().
    • nextDouble

      public double nextDouble()
      Return the next double in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a double, same as IndexIterator.getDoubleNext().
    • nextFloat

      public float nextFloat()
      Return the next float in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a float, same as IndexIterator.getFloatNext().
    • nextByte

      public byte nextByte()
      Return the next byte in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a byte, same as IndexIterator.getByteNext().
    • nextShort

      public short nextShort()
      Return the next short in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a short, same as IndexIterator.getShortNext().
    • nextInt

      public int nextInt()
      Return the next int in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as an int, same as IndexIterator.getIntNext().
    • nextLong

      public long nextLong()
      Return the next long in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a long, same as IndexIterator.getLongNext().
    • nextChar

      public char nextChar()
      Return the next char in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a char, same as IndexIterator.getCharNext().
    • nextBoolean

      public boolean nextBoolean()
      Return the next boolean in the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.
      Returns:
      next element as a boolean, same as IndexIterator.getBooleanNext().
    • resetLocalIterator

      public void resetLocalIterator()
      Reset the local iterator. Uses the local iterator, which is not thread-safe. Use getIndexIterator if you need thread-safety.