.
*/
/** ***********************************************************
*
*
* PURPOSE:
* This class represents a MArray with base type double.
* @version $Revision: 1.5 $
* method intersectionWith(RasMInterval) uses byte array and is not optimized for special data arrays
*
*
* COMMENTS:
*
*
*********************************************************** */
public class RasMArrayDouble extends RasGMArray
{
/** default constructor */
public RasMArrayDouble()
{
super();
typeLength = SIZE_OF_DOUBLE;
}
/**
* constructor for uninitialized MDD objects
* @param initDomain The initial Domain of the MArray
*/
public RasMArrayDouble(final RasMInterval initDomain)
{
super(initDomain, SIZE_OF_DOUBLE);
objectData = new double[(int)(dataSize/SIZE_OF_DOUBLE)];
data = null;
}
/**
* Constructor for uninitialized MDD objects with Storage Layout
* @param initDomain The initial Domain of the MArray
* @param RasStorageLayout The storage layout to be used
*/
public RasMArrayDouble(final RasMInterval initDomain, RasStorageLayout stl)
{
super(initDomain, SIZE_OF_DOUBLE, stl);
objectData = new double[(int)(dataSize/SIZE_OF_DOUBLE)];
data = null;
}
/**
* copy constructor
* @param obj a copy of this object will be created
*/
public RasMArrayDouble(final RasMArrayDouble obj)
{
super(obj);
if(obj.objectData!=null)
{
objectData = new double[(int)(obj.dataSize/SIZE_OF_DOUBLE)];
System.arraycopy(obj.getDoubleArray(), 0, objectData, 0, (int)(obj.dataSize/SIZE_OF_DOUBLE));
data = null;
}
}
/**
* subscript operator for read access of a cell. The cell value is returned
* as a byte[4] array. This kind of access to a cell is significantly slower
* than getDouble(), because each cell value has to be converted from double to a
* byte[SIZE_OF_DOUBLE] array.
* The user has to take care that each Cell value is stored, before getting the next Cell.
*/
public byte[] getCell(RasPoint point)
throws RasDimensionMismatchException, RasIndexOutOfBoundsException
{
double cellValue;
long tmp;
//first test dimensionality
if(point.dimension() != domain.dimension())
throw new RasDimensionMismatchException(point.dimension(), domain.dimension());
cellValue = ((double[])objectData)[(int)domain.cellOffset(point)];
for(int i=0; i>>= (((SIZE_OF_DOUBLE -1)-i)*8);
currentCell[i] = (byte)tmp;
}
return currentCell;
}
/** subscript operator for read access of a cell. The cell value is returned as
* an double. This access method is faster then getCell(), because no conversion
* from double to Byte[SIZE_OF_DOUBLE] has to be done.
*/
public double getDouble(final RasPoint point)
throws RasDimensionMismatchException, RasIndexOutOfBoundsException
{
// first test dimensionality
if(point.dimension() != domain.dimension())
throw new RasDimensionMismatchException(point.dimension(), domain.dimension());
return ((double[])objectData)[(int)domain.cellOffset(point)];
}
/**
* get the internal representation of the array
*/
public double[] getDoubleArray()
{
if(objectData==null)
{
ByteArrayInputStream bis = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bis);
objectData = new double[data.length/SIZE_OF_DOUBLE];
try
{
for(int j=0; j