diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | edbf3b6af777b721cd2a1ef461947e51e88241e1 (patch) | |
tree | f09427b843b192cccf8c3b5328cb81dddf6489fa /awt/java/awt/image/DataBuffer.java | |
parent | d5193d9394c5e58176d7bcdf50ef017f8a3b9e1e (diff) | |
download | frameworks_native-edbf3b6af777b721cd2a1ef461947e51e88241e1.zip frameworks_native-edbf3b6af777b721cd2a1ef461947e51e88241e1.tar.gz frameworks_native-edbf3b6af777b721cd2a1ef461947e51e88241e1.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'awt/java/awt/image/DataBuffer.java')
-rw-r--r-- | awt/java/awt/image/DataBuffer.java | 481 |
1 files changed, 481 insertions, 0 deletions
diff --git a/awt/java/awt/image/DataBuffer.java b/awt/java/awt/image/DataBuffer.java new file mode 100644 index 0000000..92f900f --- /dev/null +++ b/awt/java/awt/image/DataBuffer.java @@ -0,0 +1,481 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @author Igor V. Stolyarov + * @version $Revision$ + */ + +package java.awt.image; + +import org.apache.harmony.awt.gl.image.DataBufferListener; +import org.apache.harmony.awt.internal.nls.Messages; + +/** + * The Class DataBuffer is a wrapper class for a data array to be used for the + * situation where a suite of functionality acts on a set of data in a + * consistent way even though the primitive type of the data may vary from one + * use to the next. + * + * @since Android 1.0 + */ +public abstract class DataBuffer { + + /** + * The Constant TYPE_BYTE. + */ + public static final int TYPE_BYTE = 0; + + /** + * The Constant TYPE_USHORT. + */ + public static final int TYPE_USHORT = 1; + + /** + * The Constant TYPE_SHORT. + */ + public static final int TYPE_SHORT = 2; + + /** + * The Constant TYPE_INT. + */ + public static final int TYPE_INT = 3; + + /** + * The Constant TYPE_FLOAT. + */ + public static final int TYPE_FLOAT = 4; + + /** + * The Constant TYPE_DOUBLE. + */ + public static final int TYPE_DOUBLE = 5; + + /** + * The Constant TYPE_UNDEFINED. + */ + public static final int TYPE_UNDEFINED = 32; + + /** + * The data type indicates the primitive type of the data in this + * DataBuffer. + */ + protected int dataType; + + /** + * The number of data arrays in this DataBuffer. + */ + protected int banks; + + /** + * The starting index for reading the data from the first (or only) internal + * data array. + */ + protected int offset; + + /** + * The length (number of elements) of the data arrays. + */ + protected int size; + + /** + * The starting indices for reading the data from the internal data arrays. + */ + protected int offsets[]; + + /** + * The data changed. + */ + boolean dataChanged = true; + + /** + * The data taken. + */ + boolean dataTaken = false; + + /** + * The listener. + */ + DataBufferListener listener; + + static { + AwtImageBackdoorAccessorImpl.init(); + } + + /** + * Instantiates a new data buffer. + * + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + * @param numBanks + * the number of data arrays to create. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. + */ + protected DataBuffer(int dataType, int size, int numBanks, int[] offsets) { + this.dataType = dataType; + this.size = size; + this.banks = numBanks; + this.offsets = offsets.clone(); + this.offset = offsets[0]; + } + + /** + * Instantiates a new data buffer with all of the data arrays starting at + * the same index. + * + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + * @param numBanks + * the number of data arrays to create. + * @param offset + * the offset to use for all of the data arrays. + */ + protected DataBuffer(int dataType, int size, int numBanks, int offset) { + this.dataType = dataType; + this.size = size; + this.banks = numBanks; + this.offset = offset; + this.offsets = new int[numBanks]; + int i = 0; + while (i < numBanks) { + offsets[i++] = offset; + } + } + + /** + * Instantiates a new data buffer with all of the data arrays read from the + * beginning (at offset zero). + * + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + * @param numBanks + * the number of data arrays to create. + */ + protected DataBuffer(int dataType, int size, int numBanks) { + this.dataType = dataType; + this.size = size; + this.banks = numBanks; + this.offset = 0; + this.offsets = new int[numBanks]; + } + + /** + * Instantiates a new data buffer with one internal data array read from the + * beginning (at offset zero). + * + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + */ + protected DataBuffer(int dataType, int size) { + this.dataType = dataType; + this.size = size; + this.banks = 1; + this.offset = 0; + this.offsets = new int[1]; + } + + /** + * Sets the data value in the specified array at the specified index. + * + * @param bank + * the internal array to the data to. + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. + */ + public abstract void setElem(int bank, int i, int val); + + /** + * Sets the float data value in the specified array at the specified index. + * + * @param bank + * the internal array to the data to. + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. + */ + public void setElemFloat(int bank, int i, float val) { + setElem(bank, i, (int)val); + } + + /** + * Sets the double data value in the specified array at the specified index. + * + * @param bank + * the internal array to the data to. + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. + */ + public void setElemDouble(int bank, int i, double val) { + setElem(bank, i, (int)val); + } + + /** + * Sets the data value in the first array at the specified index. + * + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. + */ + public void setElem(int i, int val) { + setElem(0, i, val); + } + + /** + * Gets the data value from the specified data array at the specified index. + * + * @param bank + * the data array to read from. + * @param i + * the index within the array where the data should be read. + * @return the data element. + */ + public abstract int getElem(int bank, int i); + + /** + * Gets the float-type data value from the specified data array at the + * specified index. + * + * @param bank + * the data array to read from. + * @param i + * the index within the array where the data should be read. + * @return the data element. + */ + public float getElemFloat(int bank, int i) { + return getElem(bank, i); + } + + /** + * Gets the double-type data value from the specified data array at the + * specified index. + * + * @param bank + * the data array to read from. + * @param i + * the index within the array where the data should be read. + * @return the data element. + */ + public double getElemDouble(int bank, int i) { + return getElem(bank, i); + } + + /** + * Sets the float data value in the first array at the specified index. + * + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. + */ + public void setElemFloat(int i, float val) { + setElemFloat(0, i, val); + } + + /** + * Sets the double data value in the first array at the specified index. + * + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. + */ + public void setElemDouble(int i, double val) { + setElemDouble(0, i, val); + } + + /** + * Gets the data value from the first data array at the specified index and + * returns it as an integer. + * + * @param i + * the index within the array where the data should be read. + * @return the data element. + */ + public int getElem(int i) { + return getElem(0, i); + } + + /** + * Gets the data value from the first data array at the specified index and + * returns it as a float. + * + * @param i + * the index within the array where the data should be read. + * @return the data element. + */ + public float getElemFloat(int i) { + return getElem(0, i); + } + + /** + * Gets the data value from the first data array at the specified index and + * returns it as a double. + * + * @param i + * the index within the array where the data should be read. + * @return the data element. + */ + public double getElemDouble(int i) { + return getElem(i); + } + + /** + * Gets the array giving the offsets corresponding to the internal data + * arrays. + * + * @return the array of offsets. + */ + public int[] getOffsets() { + return offsets; + } + + /** + * Gets the size in bits of the primitive data type. + * + * @return the size in bits of the primitive data type. + */ + public int getSize() { + return size; + } + + /** + * Gets the offset corresponding to the first internal data array. + * + * @return the offset. + */ + public int getOffset() { + return offset; + } + + /** + * Gets the number of data arrays in this DataBuffer. + * + * @return the number of data arrays. + */ + public int getNumBanks() { + return banks; + } + + /** + * Gets the primitive type of this buffer's data. + * + * @return the data type. + */ + public int getDataType() { + return this.dataType; + } + + /** + * Gets the size in bits of the primitive data type. + * + * @param type + * the primitive type. + * @return the size in bits of the primitive data type. + */ + public static int getDataTypeSize(int type) { + switch (type) { + + case TYPE_BYTE: + return 8; + + case TYPE_USHORT: + case TYPE_SHORT: + return 16; + + case TYPE_INT: + case TYPE_FLOAT: + return 32; + + case TYPE_DOUBLE: + return 64; + + default: + // awt.22C=Unknown data type {0} + throw new IllegalArgumentException(Messages.getString("awt.22C", type)); //$NON-NLS-1$ + } + } + + /** + * Notifies the listener that the data has changed. + */ + void notifyChanged() { + if (listener != null && !dataChanged) { + dataChanged = true; + listener.dataChanged(); + } + } + + /** + * Notifies the listener that the data has been released. + */ + void notifyTaken() { + if (listener != null && !dataTaken) { + dataTaken = true; + listener.dataTaken(); + } + } + + /** + * Release the data. + */ + void releaseData() { + if (listener != null && dataTaken) { + dataTaken = false; + listener.dataReleased(); + } + } + + /** + * Adds the data buffer listener. + * + * @param listener + * the listener. + */ + void addDataBufferListener(DataBufferListener listener) { + this.listener = listener; + } + + /** + * Removes the data buffer listener. + */ + void removeDataBufferListener() { + listener = null; + } + + /** + * Validate. + */ + void validate() { + dataChanged = false; + } + +} |