/*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* ****************************************************************
******************************************************************
******************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997
*** As an unpublished work pursuant to Title 17 of the United
*** States Code. All rights reserved.
******************************************************************
******************************************************************
******************************************************************/
package java.awt.image;
import static sun.java2d.StateTrackable.State.*;
This class extends DataBuffer
and stores data internally
as integers.
/**
* This class extends <CODE>DataBuffer</CODE> and stores data internally
* as integers.
* <p>
* <a name="optimizations">
* Note that some implementations may function more efficiently
* if they can maintain control over how the data for an image is
* stored.
* For example, optimizations such as caching an image in video
* memory require that the implementation track all modifications
* to that data.
* Other implementations may operate better if they can store the
* data in locations other than a Java array.
* To maintain optimum compatibility with various optimizations
* it is best to avoid constructors and methods which expose the
* underlying storage as a Java array as noted below in the
* documentation for those methods.
* </a>
*/
public final class DataBufferInt extends DataBuffer
{
The default data bank. /** The default data bank. */
int data[];
All data banks /** All data banks */
int bankdata[][];
Constructs an integer-based DataBuffer
with a single bank
and the specified size.
Params: - size – The size of the
DataBuffer
.
/**
* Constructs an integer-based <CODE>DataBuffer</CODE> with a single bank
* and the specified size.
*
* @param size The size of the <CODE>DataBuffer</CODE>.
*/
public DataBufferInt(int size) {
super(STABLE, TYPE_INT, size);
data = new int[size];
bankdata = new int[1][];
bankdata[0] = data;
}
Constructs an integer-based DataBuffer
with the specified number of
banks, all of which are the specified size.
Params: - size – The size of the banks in the
DataBuffer
. - numBanks – The number of banks in the a
DataBuffer
.
/**
* Constructs an integer-based <CODE>DataBuffer</CODE> with the specified number of
* banks, all of which are the specified size.
*
* @param size The size of the banks in the <CODE>DataBuffer</CODE>.
* @param numBanks The number of banks in the a<CODE>DataBuffer</CODE>.
*/
public DataBufferInt(int size, int numBanks) {
super(STABLE, TYPE_INT, size, numBanks);
bankdata = new int[numBanks][];
for (int i= 0; i < numBanks; i++) {
bankdata[i] = new int[size];
}
data = bankdata[0];
}
Constructs an integer-based DataBuffer
with a single bank using the
specified array.
Only the first size
elements should be used by accessors of
this DataBuffer
. dataArray
must be large enough to
hold size
elements.
Note that DataBuffer
objects created by this constructor may be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Params: - dataArray – The integer array for the
DataBuffer
. - size – The size of the
DataBuffer
bank.
/**
* Constructs an integer-based <CODE>DataBuffer</CODE> with a single bank using the
* specified array.
* Only the first <CODE>size</CODE> elements should be used by accessors of
* this <CODE>DataBuffer</CODE>. <CODE>dataArray</CODE> must be large enough to
* hold <CODE>size</CODE> elements.
* <p>
* Note that {@code DataBuffer} objects created by this constructor
* may be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @param dataArray The integer array for the <CODE>DataBuffer</CODE>.
* @param size The size of the <CODE>DataBuffer</CODE> bank.
*/
public DataBufferInt(int dataArray[], int size) {
super(UNTRACKABLE, TYPE_INT, size);
data = dataArray;
bankdata = new int[1][];
bankdata[0] = data;
}
Constructs an integer-based DataBuffer
with a single bank using the
specified array, size, and offset. dataArray
must have at least
offset
+ size
elements. Only elements offset
through offset
+ size
- 1
should be used by accessors of this DataBuffer
.
Note that DataBuffer
objects created by this constructor may be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Params: - dataArray – The integer array for the
DataBuffer
. - size – The size of the
DataBuffer
bank. - offset – The offset into the
dataArray
.
/**
* Constructs an integer-based <CODE>DataBuffer</CODE> with a single bank using the
* specified array, size, and offset. <CODE>dataArray</CODE> must have at least
* <CODE>offset</CODE> + <CODE>size</CODE> elements. Only elements <CODE>offset</CODE>
* through <CODE>offset</CODE> + <CODE>size</CODE> - 1
* should be used by accessors of this <CODE>DataBuffer</CODE>.
* <p>
* Note that {@code DataBuffer} objects created by this constructor
* may be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @param dataArray The integer array for the <CODE>DataBuffer</CODE>.
* @param size The size of the <CODE>DataBuffer</CODE> bank.
* @param offset The offset into the <CODE>dataArray</CODE>.
*/
public DataBufferInt(int dataArray[], int size, int offset) {
super(UNTRACKABLE, TYPE_INT, size, 1, offset);
data = dataArray;
bankdata = new int[1][];
bankdata[0] = data;
}
Constructs an integer-based DataBuffer
with the specified arrays.
The number of banks will be equal to dataArray.length
.
Only the first size
elements of each array should be used by
accessors of this DataBuffer
.
Note that DataBuffer
objects created by this constructor may be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Params: - dataArray – The integer arrays for the
DataBuffer
. - size – The size of the banks in the
DataBuffer
.
/**
* Constructs an integer-based <CODE>DataBuffer</CODE> with the specified arrays.
* The number of banks will be equal to <CODE>dataArray.length</CODE>.
* Only the first <CODE>size</CODE> elements of each array should be used by
* accessors of this <CODE>DataBuffer</CODE>.
* <p>
* Note that {@code DataBuffer} objects created by this constructor
* may be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @param dataArray The integer arrays for the <CODE>DataBuffer</CODE>.
* @param size The size of the banks in the <CODE>DataBuffer</CODE>.
*/
public DataBufferInt(int dataArray[][], int size) {
super(UNTRACKABLE, TYPE_INT, size, dataArray.length);
bankdata = (int [][]) dataArray.clone();
data = bankdata[0];
}
Constructs an integer-based DataBuffer
with the specified arrays, size,
and offsets.
The number of banks is equal to dataArray.length
. Each array must
be at least as large as size
+ the corresponding offset. There must
be an entry in the offset array for each dataArray
entry. For each
bank, only elements offset
through
offset
+ size
- 1 should be
used by accessors of this DataBuffer
.
Note that DataBuffer
objects created by this constructor may be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Params: - dataArray – The integer arrays for the
DataBuffer
. - size – The size of the banks in the
DataBuffer
. - offsets – The offsets into each array.
/**
* Constructs an integer-based <CODE>DataBuffer</CODE> with the specified arrays, size,
* and offsets.
* The number of banks is equal to <CODE>dataArray.length</CODE>. Each array must
* be at least as large as <CODE>size</CODE> + the corresponding offset. There must
* be an entry in the offset array for each <CODE>dataArray</CODE> entry. For each
* bank, only elements <CODE>offset</CODE> through
* <CODE>offset</CODE> + <CODE>size</CODE> - 1 should be
* used by accessors of this <CODE>DataBuffer</CODE>.
* <p>
* Note that {@code DataBuffer} objects created by this constructor
* may be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @param dataArray The integer arrays for the <CODE>DataBuffer</CODE>.
* @param size The size of the banks in the <CODE>DataBuffer</CODE>.
* @param offsets The offsets into each array.
*/
public DataBufferInt(int dataArray[][], int size, int offsets[]) {
super(UNTRACKABLE, TYPE_INT, size, dataArray.length, offsets);
bankdata = (int [][]) dataArray.clone();
data = bankdata[0];
}
Returns the default (first) int data array in DataBuffer
.
Note that calling this method may cause this DataBuffer
object to be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Returns: The first integer data array.
/**
* Returns the default (first) int data array in <CODE>DataBuffer</CODE>.
* <p>
* Note that calling this method may cause this {@code DataBuffer}
* object to be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @return The first integer data array.
*/
public int[] getData() {
theTrackable.setUntrackable();
return data;
}
Returns the data array for the specified bank.
Note that calling this method may cause this DataBuffer
object to be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Params: - bank – The bank whose data array you want to get.
Returns: The data array for the specified bank.
/**
* Returns the data array for the specified bank.
* <p>
* Note that calling this method may cause this {@code DataBuffer}
* object to be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @param bank The bank whose data array you want to get.
* @return The data array for the specified bank.
*/
public int[] getData(int bank) {
theTrackable.setUntrackable();
return bankdata[bank];
}
Returns the data arrays for all banks.
Note that calling this method may cause this DataBuffer
object to be incompatible with performance
optimizations used by some implementations (such as caching
an associated image in video memory).
Returns: All of the data arrays.
/**
* Returns the data arrays for all banks.
* <p>
* Note that calling this method may cause this {@code DataBuffer}
* object to be incompatible with <a href="#optimizations">performance
* optimizations</a> used by some implementations (such as caching
* an associated image in video memory).
*
* @return All of the data arrays.
*/
public int[][] getBankData() {
theTrackable.setUntrackable();
return (int [][]) bankdata.clone();
}
Returns the requested data array element from the first (default) bank.
Params: - i – The data array element you want to get.
See Also: Returns: The requested data array element as an integer.
/**
* Returns the requested data array element from the first (default) bank.
*
* @param i The data array element you want to get.
* @return The requested data array element as an integer.
* @see #setElem(int, int)
* @see #setElem(int, int, int)
*/
public int getElem(int i) {
return data[i+offset];
}
Returns the requested data array element from the specified bank.
Params: - bank – The bank from which you want to get a data array element.
- i – The data array element you want to get.
See Also: Returns: The requested data array element as an integer.
/**
* Returns the requested data array element from the specified bank.
*
* @param bank The bank from which you want to get a data array element.
* @param i The data array element you want to get.
* @return The requested data array element as an integer.
* @see #setElem(int, int)
* @see #setElem(int, int, int)
*/
public int getElem(int bank, int i) {
return bankdata[bank][i+offsets[bank]];
}
Sets the requested data array element in the first (default) bank
to the specified value.
Params: - i – The data array element you want to set.
- val – The integer value to which you want to set the data array element.
See Also:
/**
* Sets the requested data array element in the first (default) bank
* to the specified value.
*
* @param i The data array element you want to set.
* @param val The integer value to which you want to set the data array element.
* @see #getElem(int)
* @see #getElem(int, int)
*/
public void setElem(int i, int val) {
data[i+offset] = val;
theTrackable.markDirty();
}
Sets the requested data array element in the specified bank
to the integer value i
.
Params: - bank – The bank in which you want to set the data array element.
- i – The data array element you want to set.
- val – The integer value to which you want to set the specified data array element.
See Also:
/**
* Sets the requested data array element in the specified bank
* to the integer value <CODE>i</CODE>.
* @param bank The bank in which you want to set the data array element.
* @param i The data array element you want to set.
* @param val The integer value to which you want to set the specified data array element.
* @see #getElem(int)
* @see #getElem(int, int)
*/
public void setElem(int bank, int i, int val) {
bankdata[bank][i+offsets[bank]] = (int)val;
theTrackable.markDirty();
}
}