1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17/** 18 * @author Igor V. Stolyarov 19 * @version $Revision$ 20 */ 21 22package java.awt.image; 23 24/** 25 * The Class DataBufferByte is the subclass of DataBuffer for the case where the 26 * underlying data is of type byte. 27 * 28 * @since Android 1.0 29 */ 30public final class DataBufferByte extends DataBuffer { 31 32 /** 33 * The data. 34 */ 35 byte data[][]; 36 37 /** 38 * Instantiates a new data buffer of type unsigned short. 39 * 40 * @param dataArrays 41 * the data arrays to copy the data from. 42 * @param size 43 * the length (number of elements) to use from the data arrays. 44 * @param offsets 45 * the starting indices for reading the data from the internal 46 * data arrays. 47 */ 48 public DataBufferByte(byte dataArrays[][], int size, int offsets[]) { 49 super(TYPE_BYTE, size, dataArrays.length, offsets); 50 data = dataArrays.clone(); 51 } 52 53 /** 54 * Instantiates a new data buffer of type unsigned short. 55 * 56 * @param dataArrays 57 * the data arrays to copy the data from. 58 * @param size 59 * the length (number of elements) to use from the data arrays. 60 */ 61 public DataBufferByte(byte dataArrays[][], int size) { 62 super(TYPE_BYTE, size, dataArrays.length); 63 data = dataArrays.clone(); 64 } 65 66 /** 67 * Instantiates a new data buffer of type unsigned short with a single 68 * underlying array of data. 69 * 70 * @param dataArray 71 * the data array to copy the data from. 72 * @param size 73 * the length (number of elements) to use. 74 * @param offset 75 * the starting index to use when reading the data. 76 */ 77 public DataBufferByte(byte dataArray[], int size, int offset) { 78 super(TYPE_BYTE, size, 1, offset); 79 data = new byte[1][]; 80 data[0] = dataArray; 81 } 82 83 /** 84 * Instantiates a new data buffer of type unsigned short with a single 85 * underlying array of data starting at index 0. 86 * 87 * @param dataArray 88 * the data array to copy the data from. 89 * @param size 90 * the length (number of elements) to use. 91 */ 92 public DataBufferByte(byte dataArray[], int size) { 93 super(TYPE_BYTE, size); 94 data = new byte[1][]; 95 data[0] = dataArray; 96 } 97 98 /** 99 * Instantiates a new empty data buffer of type unsigned short with offsets 100 * equal to zero. 101 * 102 * @param size 103 * the length (number of elements) to use from the data arrays. 104 * @param numBanks 105 * the number of data arrays to create. 106 */ 107 public DataBufferByte(int size, int numBanks) { 108 super(TYPE_BYTE, size, numBanks); 109 data = new byte[numBanks][]; 110 int i = 0; 111 while (i < numBanks) { 112 data[i++] = new byte[size]; 113 } 114 } 115 116 /** 117 * Instantiates a new empty data buffer of type unsigned short with a single 118 * underlying array of data starting at index 0. 119 * 120 * @param size 121 * the length (number of elements) to use. 122 */ 123 public DataBufferByte(int size) { 124 super(TYPE_BYTE, size); 125 data = new byte[1][]; 126 data[0] = new byte[size]; 127 } 128 129 @Override 130 public void setElem(int bank, int i, int val) { 131 data[bank][offsets[bank] + i] = (byte)val; 132 notifyChanged(); 133 } 134 135 @Override 136 public void setElem(int i, int val) { 137 data[0][offset + i] = (byte)val; 138 notifyChanged(); 139 } 140 141 @Override 142 public int getElem(int bank, int i) { 143 return (data[bank][offsets[bank] + i]) & 0xff; 144 } 145 146 /** 147 * Gets the data of the specified internal data array. 148 * 149 * @param bank 150 * the index of the desired data array. 151 * @return the data. 152 */ 153 public byte[] getData(int bank) { 154 notifyTaken(); 155 return data[bank]; 156 } 157 158 @Override 159 public int getElem(int i) { 160 return (data[0][offset + i]) & 0xff; 161 } 162 163 /** 164 * Gets the bank data. 165 * 166 * @return the bank data. 167 */ 168 public byte[][] getBankData() { 169 notifyTaken(); 170 return data.clone(); 171 } 172 173 /** 174 * Gets the data of the first data array. 175 * 176 * @return the data. 177 */ 178 public byte[] getData() { 179 notifyTaken(); 180 return data[0]; 181 } 182 183} 184