FileDocCategorySizeDatePackage
DataBuffer.javaAPI DocJava SE 5 API15284Fri Aug 26 14:56:54 BST 2005java.awt.image

DataBuffer

public abstract class DataBuffer extends Object
This class exists to wrap one or more data arrays. Each data array in the DataBuffer is referred to as a bank. Accessor methods for getting and setting elements of the DataBuffer's banks exist with and without a bank specifier. The methods without a bank specifier use the default 0th bank. The DataBuffer can optionally take an offset per bank, so that data in an existing array can be used even if the interesting data doesn't start at array location zero. Getting or setting the 0th element of a bank, uses the (0+offset)th element of the array. The size field specifies how much of the data array is available for use. Size + offset for a given bank should never be greater than the length of the associated data array. The data type of a data buffer indicates the type of the data array(s) and may also indicate additional semantics, e.g. storing unsigned 8-bit data in elements of a byte array. The data type may be TYPE_UNDEFINED or one of the types defined below. Other types may be added in the future. Generally, an object of class DataBuffer will be cast down to one of its data type specific subclasses to access data type specific methods for improved performance. Currently, the Java 2D(tm) API image classes use TYPE_BYTE, TYPE_USHORT, TYPE_INT, TYPE_SHORT, TYPE_FLOAT, and TYPE_DOUBLE DataBuffers to store image data.
see
java.awt.image.Raster
see
java.awt.image.SampleModel

Fields Summary
public static final int
TYPE_BYTE
Tag for unsigned byte data.
public static final int
TYPE_USHORT
Tag for unsigned short data.
public static final int
TYPE_SHORT
Tag for signed short data. Placeholder for future use.
public static final int
TYPE_INT
Tag for int data.
public static final int
TYPE_FLOAT
Tag for float data. Placeholder for future use.
public static final int
TYPE_DOUBLE
Tag for double data. Placeholder for future use.
public static final int
TYPE_UNDEFINED
Tag for undefined data.
protected int
dataType
The data type of this DataBuffer.
protected int
banks
The number of banks in this DataBuffer.
protected int
offset
Offset into default (first) bank from which to get the first element.
protected int
size
Usable size of all banks.
protected int[]
offsets
Offsets into all banks.
private static final int[]
dataTypeSize
Size of the data types indexed by DataType tags defined above.
Constructors Summary
protected DataBuffer(int dataType, int size)
Constructs a DataBuffer containing one bank of the specified data type and size.

param
dataType the data type of this DataBuffer
param
size the size of the banks

        this.dataType = dataType;
        this.banks = 1;
        this.size = size;
        this.offset = 0;
        this.offsets = new int[1];  // init to 0 by new
    
protected DataBuffer(int dataType, int size, int numBanks)
Constructs a DataBuffer containing the specified number of banks. Each bank has the specified size and an offset of 0.

param
dataType the data type of this DataBuffer
param
size the size of the banks
param
numBanks the number of banks in this DataBuffer

        this.dataType = dataType;
        this.banks = numBanks;
        this.size = size;
        this.offset = 0;
        this.offsets = new int[banks]; // init to 0 by new
    
protected DataBuffer(int dataType, int size, int numBanks, int offset)
Constructs a DataBuffer that contains the specified number of banks. Each bank has the specified datatype, size and offset.

param
dataType the data type of this DataBuffer
param
size the size of the banks
param
numBanks the number of banks in this DataBuffer
param
offset the offset for each bank

        this.dataType = dataType;
        this.banks = numBanks;
        this.size = size;
        this.offset = offset;
        this.offsets = new int[numBanks];
        for (int i = 0; i < numBanks; i++) {
            this.offsets[i] = offset;
        }
    
protected DataBuffer(int dataType, int size, int numBanks, int[] offsets)
Constructs a DataBuffer which contains the specified number of banks. Each bank has the specified datatype and size. The offset for each bank is specified by its respective entry in the offsets array.

param
dataType the data type of this DataBuffer
param
size the size of the banks
param
numBanks the number of banks in this DataBuffer
param
offsets an array containing an offset for each bank.
throws
ArrayIndexOutOfBoundsException if numBanks does not equal the length of offsets

        if (numBanks != offsets.length) {
            throw new ArrayIndexOutOfBoundsException("Number of banks" +
                 " does not match number of bank offsets");
        }
        this.dataType = dataType;
        this.banks = numBanks;
        this.size = size;
        this.offset = offsets[0];
        this.offsets = (int[])offsets.clone();
    
Methods Summary
public intgetDataType()
Returns the data type of this DataBuffer.

return
the data type of this DataBuffer.

        return dataType;
    
public static intgetDataTypeSize(int type)
Returns the size (in bits) of the data type, given a datatype tag.

param
type the value of one of the defined datatype tags
return
the size of the data type
throws
IllegalArgumentException if type is less than zero or greater than {@link #TYPE_DOUBLE}

 
                                                                
         
        if (type < TYPE_BYTE || type > TYPE_DOUBLE) {
            throw new IllegalArgumentException("Unknown data type "+type);
        }
        return dataTypeSize[type];
    
public intgetElem(int i)
Returns the requested data array element from the first (default) bank as an integer.

param
i the index of the requested data array element
return
the data array element at the specified index.
see
#setElem(int, int)
see
#setElem(int, int, int)

        return getElem(0,i);
    
public abstract intgetElem(int bank, int i)
Returns the requested data array element from the specified bank as an integer.

param
bank the specified bank
param
i the index of the requested data array element
return
the data array element at the specified index from the specified bank at the specified index.
see
#setElem(int, int)
see
#setElem(int, int, int)

public doublegetElemDouble(int i)
Returns the requested data array element from the first (default) bank as a double. The implementation in this class is to cast {@link #getElem(int)} to a double. Subclasses can override this method if another implementation is needed.

param
i the specified index
return
a double value representing the element at the specified index in the data array.
see
#setElemDouble(int, double)
see
#setElemDouble(int, int, double)

        return (double)getElem(i);
    
public doublegetElemDouble(int bank, int i)
Returns the requested data array element from the specified bank as a double. The implementation in this class is to cast getElem(bank, i) to a double. Subclasses may override this method if another implementation is needed.

param
bank the specified bank
param
i the specified index
return
a double value representing the element from the specified bank at the specified index in the data array.
see
#setElemDouble(int, double)
see
#setElemDouble(int, int, double)

        return (double)getElem(bank,i);
    
public floatgetElemFloat(int i)
Returns the requested data array element from the first (default) bank as a float. The implementation in this class is to cast getElem(i) to a float. Subclasses may override this method if another implementation is needed.

param
i the index of the requested data array element
return
a float value representing the data array element at the specified index.
see
#setElemFloat(int, float)
see
#setElemFloat(int, int, float)

        return (float)getElem(i);
    
public floatgetElemFloat(int bank, int i)
Returns the requested data array element from the specified bank as a float. The implementation in this class is to cast {@link #getElem(int, int)} to a float. Subclasses can override this method if another implementation is needed.

param
bank the specified bank
param
i the index of the requested data array element
return
a float value representing the data array element from the specified bank at the specified index.
see
#setElemFloat(int, float)
see
#setElemFloat(int, int, float)

        return (float)getElem(bank,i);
    
public intgetNumBanks()
Returns the number of banks in this DataBuffer.

return
the number of banks.

        return banks;
    
public intgetOffset()
Returns the offset of the default bank in array elements.

return
the offset of the default bank.

        return offset;
    
public int[]getOffsets()
Returns the offsets (in array elements) of all the banks.

return
the offsets of all banks.

        return (int[])offsets.clone();
    
public intgetSize()
Returns the size (in array elements) of all banks.

return
the size of all banks.

        return size;
    
public voidsetElem(int i, int val)
Sets the requested data array element in the first (default) bank from the given integer.

param
i the specified index into the data array
param
val the data to set the element at the specified index in the data array
see
#getElem(int)
see
#getElem(int, int)

        setElem(0,i,val);
    
public abstract voidsetElem(int bank, int i, int val)
Sets the requested data array element in the specified bank from the given integer.

param
bank the specified bank
param
i the specified index into the data array
param
val the data to set the element in the specified bank at the specified index in the data array
see
#getElem(int)
see
#getElem(int, int)

public voidsetElemDouble(int i, double val)
Sets the requested data array element in the first (default) bank from the given double. The implementation in this class is to cast val to an int and call {@link #setElem(int, int)}. Subclasses can override this method if another implementation is needed.

param
i the specified index
param
val the value to set the element at the specified index in the data array
see
#getElemDouble(int)
see
#getElemDouble(int, int)

        setElem(i,(int)val);
    
public voidsetElemDouble(int bank, int i, double val)
Sets the requested data array element in the specified bank from the given double. The implementation in this class is to cast val to an int and call {@link #setElem(int, int)}. Subclasses can override this method if another implementation is needed.

param
bank the specified bank
param
i the specified index
param
val the value to set the element in the specified bank at the specified index of the data array
see
#getElemDouble(int)
see
#getElemDouble(int, int)

        setElem(bank,i,(int)val);
    
public voidsetElemFloat(int i, float val)
Sets the requested data array element in the first (default) bank from the given float. The implementation in this class is to cast val to an int and call {@link #setElem(int, int)}. Subclasses can override this method if another implementation is needed.

param
i the specified index
param
val the value to set the element at the specified index in the data array
see
#getElemFloat(int)
see
#getElemFloat(int, int)

        setElem(i,(int)val);
    
public voidsetElemFloat(int bank, int i, float val)
Sets the requested data array element in the specified bank from the given float. The implementation in this class is to cast val to an int and call {@link #setElem(int, int)}. Subclasses can override this method if another implementation is needed.

param
bank the specified bank
param
i the specified index
param
val the value to set the element in the specified bank at the specified index in the data array
see
#getElemFloat(int)
see
#getElemFloat(int, int)

        setElem(bank,i,(int)val);
    
static int[]toIntArray(java.lang.Object obj)

        if (obj instanceof int[]) {
            return (int[])obj;
        } else if (obj == null) {
            return null;
        } else if (obj instanceof short[]) {
            short sdata[] = (short[])obj;
            int idata[] = new int[sdata.length];
            for (int i = 0; i < sdata.length; i++) {
                idata[i] = (int)sdata[i] & 0xffff;
            }
            return idata;
        } else if (obj instanceof byte[]) {
            byte bdata[] = (byte[])obj;
            int idata[] = new int[bdata.length];
            for (int i = 0; i < bdata.length; i++) {
                idata[i] = 0xff & (int)bdata[i];
            }
            return idata;
        }
        return null;