ucar.ma2
Class ArrayStructureMA

java.lang.Object
  extended by ucar.ma2.Array
      extended by ucar.ma2.ArrayStructure
          extended by ucar.ma2.ArrayStructureMA

public class ArrayStructureMA
extends ArrayStructure

Concrete implementation of ArrayStructure, data storage is in member arrays, which are converted to StructureData member data on the fly. This defers object creation for efficiency. Use getArray() and getScalar() data accessors if possible. How to create:

    ArrayStructureMA asma = new ArrayStructureMA( smembers, getShape());
    for (int i = 0; i < orgVariables.size(); i++) {
      Variable v = (Variable) orgVariables.get(i);
      Array data = v.read();
      asma.setMemberArray( v.getName(), data);
    } 
How to do Nested Structures:
   Structure {
     float f1;
     short f2(3);

     Structure {
       int g1;
       double(2) g2;
       double(3,4) g3;

       Structure {
         int h1;
         double(2) h2;
       } nested2(7);

     } nested1(12);
   } s(4);
   
Example code:
  public void testMA() throws IOException, InvalidRangeException {
    StructureMembers members = new StructureMembers("s");

    StructureMembers.Member m = new StructureMembers.Member("f1", "desc", "units", DataType.FLOAT, new int[] {1});
    members.addMember( m);
    Array data = Array.factory(DataType.FLOAT, new int[] {4});
    m.setDataObject( data);
    fill(data);

    m = new StructureMembers.Member("f2", "desc", "units", DataType.SHORT, new int[] {3});
    members.addMember( m);
    data = Array.factory(DataType.SHORT, new int[] {4, 3});
    m.setDataObject( data);
    fill(data);

    m = new StructureMembers.Member("nested1", "desc", "units", DataType.STRUCTURE, new int[] {9});
    members.addMember( m);
    data = makeNested1( m);
    m.setDataObject( data);

    ArrayStructureMA as = new ArrayStructureMA( members, new int[] {4});
  }

  public ArrayStructure makeNested1(StructureMembers.Member parent) throws IOException, InvalidRangeException {
    StructureMembers members = new StructureMembers(parent.getName());
    parent.setStructureMembers( members);

    StructureMembers.Member m = new StructureMembers.Member("g1", "desc", "units", DataType.INT, new int[] {1});
    members.addMember( m);
    Array data = Array.factory(DataType.INT, new int[] {4, 9});
    m.setDataObject( data);
    fill(data);

    m = new StructureMembers.Member("g2", "desc", "units", DataType.DOUBLE, new int[] {2});
    members.addMember( m);
    data = Array.factory(DataType.DOUBLE, new int[] {4, 9, 2});
    m.setDataObject( data);
    fill(data);

    m = new StructureMembers.Member("g3", "desc", "units", DataType.DOUBLE, new int[] {3, 4});
    members.addMember( m);
    data = Array.factory(DataType.DOUBLE, new int[] {4, 9, 3, 4});
    m.setDataObject( data);
    fill(data);

    m = new StructureMembers.Member("nested2", "desc", "units", DataType.STRUCTURE, new int[] {7});
    members.addMember( m);
    data = makeNested2( m);
    m.setDataObject( data);

    return new ArrayStructureMA( members, new int[] {4, 9});
  }

  public ArrayStructure makeNested2(StructureMembers.Member parent) throws IOException, InvalidRangeException {
    StructureMembers members = new StructureMembers(parent.getName());
    parent.setStructureMembers( members);

    StructureMembers.Member m = new StructureMembers.Member("h1", "desc", "units", DataType.INT, new int[] {1});
    members.addMember( m);
    Array data = Array.factory(DataType.INT, new int[] {4, 9, 7});
    m.setDataObject( data);
    fill(data);

    m = new StructureMembers.Member("h2", "desc", "units", DataType.DOUBLE, new int[] {2});
    members.addMember( m);
    data = Array.factory(DataType.DOUBLE, new int[] {4, 9, 7, 2});
    m.setDataObject( data);
    fill(data);

    return new ArrayStructureMA( members, new int[] {4, 9, 7});
  }
 

Version:
$Revision:51 $ $Date:2006-07-12 17:13:13Z $
Author:
caron
See Also:
Array

Field Summary
 
Fields inherited from class ucar.ma2.ArrayStructure
members, nelems, sdata
 
Fields inherited from class ucar.ma2.Array
indexCalc, rank, scalarIndex
 
Constructor Summary
ArrayStructureMA(StructureMembers members, int[] shape)
          Create a new Array of type StructureData and the given members and shape.
 
Method Summary
 ArrayStructure getArrayStructure(int recnum, StructureMembers.Member m)
          Get member data of type array of Structure.
 byte[] getJavaArrayByte(int recnum, StructureMembers.Member m)
          Get member data of type byte as a 1D array.
 char[] getJavaArrayChar(int recnum, StructureMembers.Member m)
          Get member data of type char as a 1D array.
 double[] getJavaArrayDouble(int recnum, StructureMembers.Member m)
          Get member data of type double as a 1D array.
 float[] getJavaArrayFloat(int recnum, StructureMembers.Member m)
          Get member data of type float as a 1D array.
 int[] getJavaArrayInt(int recnum, StructureMembers.Member m)
          Get member data of type int as a 1D array.
 long[] getJavaArrayLong(int recnum, StructureMembers.Member m)
          Get member data of type long as a 1D array.
 short[] getJavaArrayShort(int recnum, StructureMembers.Member m)
          Get member data of type short as a 1D array.
 java.lang.String[] getJavaArrayString(int recnum, StructureMembers.Member m)
          Get member data of type String as a 1D array.
 byte getScalarByte(int recnum, StructureMembers.Member m)
          Get scalar member data of type byte.
 char getScalarChar(int recnum, StructureMembers.Member m)
          Get scalar member data of type char.
 double getScalarDouble(int recnum, StructureMembers.Member m)
          Get scalar member data of type double.
 float getScalarFloat(int recnum, StructureMembers.Member m)
          Get scalar member data of type float.
 int getScalarInt(int recnum, StructureMembers.Member m)
          Get scalar member data of type int.
 long getScalarLong(int recnum, StructureMembers.Member m)
          Get scalar member data of type long.
 short getScalarShort(int recnum, StructureMembers.Member m)
          Get scalar member data of type short.
 java.lang.String getScalarString(int recnum, StructureMembers.Member m)
          Get member data of type String or char.
 StructureData getScalarStructure(int recnum, StructureMembers.Member m)
          Get member data of type Structure.
 java.lang.Object getStorage()
          Return backing storage in the StructureMembers
protected  StructureData makeStructureData(ArrayStructure as, int index)
           
 void setMemberArray(java.lang.String memberName, Array data)
          Set the data array for this member.
 
Methods inherited from class ucar.ma2.ArrayStructure
convertScalarDouble, copy, createView, getArray, getArrayByte, getArrayChar, getArrayDouble, getArrayFloat, getArrayInt, getArrayLong, getArrayShort, getArrayString, getBoolean, getByte, getChar, getDouble, getElementType, getFloat, getInt, getLong, getObject, getObject, getObject, getScalarObject, getShort, getStructureData, getStructureData, getStructureMembers, getStructureSize, setBoolean, setByte, setChar, setDouble, setFloat, setInt, setLong, setObject, setShort
 
Methods inherited from class ucar.ma2.Array
arraycopy, copyTo1DJavaArray, copyToNDJavaArray, factory, factory, factory, factory, factoryConstant, flip, get1DJavaArray, getIndex, getIndexIterator, getIndexIteratorFast, getIndexName, getRangeIterator, getRank, getShape, getSize, permute, reduce, reduce, reshape, section, section, section, sectionNoReduce, sectionNoReduce, setIndexName, shapeToString, slice, toString, transpose
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ArrayStructureMA

public ArrayStructureMA(StructureMembers members,
                        int[] shape)
Create a new Array of type StructureData and the given members and shape.

You must set the data Arrays on each of the Members, using setDataObject(). These data Arrays contain the data for that member Variable, for all the StructureData. Therefore it has rank one greater that the Members. The extra dimension must be the outermost (slowest varying) dimension. ie, if some member has shape [3,10], the array would have shape [nrows, 3, 10].

Parameters:
members - a description of the structure members
shape - the shape of the Array.
Method Detail

setMemberArray

public void setMemberArray(java.lang.String memberName,
                           Array data)
Set the data array for this member.

Parameters:
memberName - name of member
data - Array for this member.

makeStructureData

protected StructureData makeStructureData(ArrayStructure as,
                                          int index)
Specified by:
makeStructureData in class ArrayStructure

getStorage

public java.lang.Object getStorage()
Return backing storage in the StructureMembers

Specified by:
getStorage in class Array

getScalarDouble

public double getScalarDouble(int recnum,
                              StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type double.

Specified by:
getScalarDouble in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type double.
Returns:
scalar double value

getJavaArrayDouble

public double[] getJavaArrayDouble(int recnum,
                                   StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type double as a 1D array. The member data may be any rank.

Specified by:
getJavaArrayDouble in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type double.
Returns:
double[]

getScalarFloat

public float getScalarFloat(int recnum,
                            StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type float.

Specified by:
getScalarFloat in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type float.
Returns:
scalar double value

getJavaArrayFloat

public float[] getJavaArrayFloat(int recnum,
                                 StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type float as a 1D array.

Specified by:
getJavaArrayFloat in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type float.
Returns:
float[]

getScalarByte

public byte getScalarByte(int recnum,
                          StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type byte.

Specified by:
getScalarByte in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type byte.
Returns:
scalar double value

getJavaArrayByte

public byte[] getJavaArrayByte(int recnum,
                               StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type byte as a 1D array.

Specified by:
getJavaArrayByte in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type byte.
Returns:
byte[]

getScalarShort

public short getScalarShort(int recnum,
                            StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type short.

Specified by:
getScalarShort in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type short.
Returns:
scalar double value

getJavaArrayShort

public short[] getJavaArrayShort(int recnum,
                                 StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type short as a 1D array.

Specified by:
getJavaArrayShort in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type float.
Returns:
short[]

getScalarInt

public int getScalarInt(int recnum,
                        StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type int.

Specified by:
getScalarInt in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type int.
Returns:
scalar double value

getJavaArrayInt

public int[] getJavaArrayInt(int recnum,
                             StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type int as a 1D array.

Specified by:
getJavaArrayInt in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type int.
Returns:
int[]

getScalarLong

public long getScalarLong(int recnum,
                          StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type long.

Specified by:
getScalarLong in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type long.
Returns:
scalar double value

getJavaArrayLong

public long[] getJavaArrayLong(int recnum,
                               StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type long as a 1D array.

Specified by:
getJavaArrayLong in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type long.
Returns:
long[]

getScalarChar

public char getScalarChar(int recnum,
                          StructureMembers.Member m)
Description copied from class: ArrayStructure
Get scalar member data of type char.

Specified by:
getScalarChar in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type char.
Returns:
scalar double value

getJavaArrayChar

public char[] getJavaArrayChar(int recnum,
                               StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type char as a 1D array.

Specified by:
getJavaArrayChar in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type char.
Returns:
char[]

getScalarString

public java.lang.String getScalarString(int recnum,
                                        StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type String or char.

Specified by:
getScalarString in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type String or char.
Returns:
scalar String value

getJavaArrayString

public java.lang.String[] getJavaArrayString(int recnum,
                                             StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type String as a 1D array.

Specified by:
getJavaArrayString in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type String.
Returns:
String[]

getScalarStructure

public StructureData getScalarStructure(int recnum,
                                        StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type Structure.

Specified by:
getScalarStructure in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type Structure.
Returns:
scalar StructureData

getArrayStructure

public ArrayStructure getArrayStructure(int recnum,
                                        StructureMembers.Member m)
Description copied from class: ArrayStructure
Get member data of type array of Structure.

Specified by:
getArrayStructure in class ArrayStructure
Parameters:
recnum - get data from the recnum-th StructureData of the ArrayStructure. Must be less than getSize();
m - get data from this StructureMembers.Member. Must be of type Structure.
Returns:
nested ArrayStructure.