DataBufferpublic 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. |
Fields Summary |
---|
public static final int | TYPE_BYTETag for unsigned byte data. | public static final int | TYPE_USHORTTag for unsigned short data. | public static final int | TYPE_SHORTTag for signed short data. Placeholder for future use. | public static final int | TYPE_INTTag for int data. | public static final int | TYPE_FLOATTag for float data. Placeholder for future use. | public static final int | TYPE_DOUBLETag for double data. Placeholder for future use. | public static final int | TYPE_UNDEFINEDTag for undefined data. | protected int | dataTypeThe data type of this DataBuffer. | protected int | banksThe number of banks in this DataBuffer. | protected int | offsetOffset into default (first) bank from which to get the first element. | protected int | sizeUsable size of all banks. | protected int[] | offsetsOffsets into all banks. | private static final int[] | dataTypeSizeSize 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.
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.
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.
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.
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 int | getDataType()Returns the data type of this DataBuffer.
return dataType;
| public static int | getDataTypeSize(int type)Returns the size (in bits) of the data type, given a datatype tag.
if (type < TYPE_BYTE || type > TYPE_DOUBLE) {
throw new IllegalArgumentException("Unknown data type "+type);
}
return dataTypeSize[type];
| public int | getElem(int i)Returns the requested data array element from the first (default) bank
as an integer.
return getElem(0,i);
| public abstract int | getElem(int bank, int i)Returns the requested data array element from the specified bank
as an integer.
| public double | getElemDouble(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.
return (double)getElem(i);
| public double | getElemDouble(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.
return (double)getElem(bank,i);
| public float | getElemFloat(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.
return (float)getElem(i);
| public float | getElemFloat(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.
return (float)getElem(bank,i);
| public int | getNumBanks()Returns the number of banks in this DataBuffer.
return banks;
| public int | getOffset()Returns the offset of the default bank in array elements.
return offset;
| public int[] | getOffsets()Returns the offsets (in array elements) of all the banks.
return (int[])offsets.clone();
| public int | getSize()Returns the size (in array elements) of all banks.
return size;
| public void | setElem(int i, int val)Sets the requested data array element in the first (default) bank
from the given integer.
setElem(0,i,val);
| public abstract void | setElem(int bank, int i, int val)Sets the requested data array element in the specified bank
from the given integer.
| public void | setElemDouble(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.
setElem(i,(int)val);
| public void | setElemDouble(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.
setElem(bank,i,(int)val);
| public void | setElemFloat(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.
setElem(i,(int)val);
| public void | setElemFloat(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.
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;
|
|