Frames | No Frames |
1: /* Copyright (C) 2000, 2002 Free Software Foundation 2: 3: This file is part of GNU Classpath. 4: 5: GNU Classpath is free software; you can redistribute it and/or modify 6: it under the terms of the GNU General Public License as published by 7: the Free Software Foundation; either version 2, or (at your option) 8: any later version. 9: 10: GNU Classpath is distributed in the hope that it will be useful, but 11: WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: General Public License for more details. 14: 15: You should have received a copy of the GNU General Public License 16: along with GNU Classpath; see the file COPYING. If not, write to the 17: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18: 02110-1301 USA. 19: 20: Linking this library statically or dynamically with other modules is 21: making a combined work based on this library. Thus, the terms and 22: conditions of the GNU General Public License cover the whole 23: combination. 24: 25: As a special exception, the copyright holders of this library give you 26: permission to link this library with independent modules to produce an 27: executable, regardless of the license terms of these independent 28: modules, and to copy and distribute the resulting executable under 29: terms of your choice, provided that you also meet, for each linked 30: independent module, the terms and conditions of the license of that 31: module. An independent module is a module which is not derived from 32: or based on this library. If you modify this library, you may extend 33: this exception to your version of the library, but you are not 34: obligated to do so. If you do not wish to do so, delete this 35: exception statement from your version. */ 36: 37: package java.awt.image; 38: 39: /* This is one of several classes that are nearly identical. Maybe we 40: should have a central template and generate all these files. This 41: is one of the cases where templates or macros would have been 42: useful to have in Java. 43: 44: This file has been created using search-replace. My only fear is 45: that these classes will grow out-of-sync as of a result of changes 46: that are not propagated to the other files. As always, mirroring 47: code is a maintenance nightmare. */ 48: 49: /** 50: * A {@link DataBuffer} that uses an array of <code>byte</code> primitives 51: * to represent each of its banks. 52: * 53: * @author Rolf W. Rasmussen (rolfwr@ii.uib.no) 54: */ 55: public final class DataBufferByte extends DataBuffer 56: { 57: private byte[] data; 58: private byte[][] bankData; 59: 60: /** 61: * Creates a new data buffer with a single data bank containing the 62: * specified number of <code>byte</code> elements. 63: * 64: * @param size the number of elements in the data bank. 65: */ 66: public DataBufferByte(int size) 67: { 68: super(TYPE_BYTE, size, 1, 0); 69: bankData = new byte[1][]; 70: data = new byte[size]; 71: bankData[0] = data; 72: } 73: 74: /** 75: * Creates a new data buffer with the specified number of data banks, 76: * each containing the specified number of <code>byte</code> elements. 77: * 78: * @param size the number of elements in the data bank. 79: * @param numBanks the number of data banks. 80: */ 81: public DataBufferByte(int size, int numBanks) 82: { 83: super(TYPE_BYTE, size, numBanks); 84: bankData = new byte[numBanks][size]; 85: data = bankData[0]; 86: } 87: 88: /** 89: * Creates a new data buffer backed by the specified data bank. 90: * <p> 91: * Note: there is no exception when <code>dataArray</code> is 92: * <code>null</code>, but in that case an exception will be thrown 93: * later if you attempt to access the data buffer. 94: * 95: * @param dataArray the data bank. 96: * @param size the number of elements in the data bank. 97: */ 98: public DataBufferByte(byte[] dataArray, int size) 99: { 100: super(TYPE_BYTE, size, 1, 0); 101: bankData = new byte[1][]; 102: data = dataArray; 103: bankData[0] = data; 104: } 105: 106: /** 107: * Creates a new data buffer backed by the specified data bank, with 108: * the specified offset to the first element. 109: * <p> 110: * Note: there is no exception when <code>dataArray</code> is 111: * <code>null</code>, but in that case an exception will be thrown 112: * later if you attempt to access the data buffer. 113: * 114: * @param dataArray the data bank. 115: * @param size the number of elements in the data bank. 116: * @param offset the offset to the first element in the array. 117: */ 118: public DataBufferByte(byte[] dataArray, int size, int offset) 119: { 120: super(TYPE_BYTE, size, 1, offset); 121: bankData = new byte[1][]; 122: data = dataArray; 123: bankData[0] = data; 124: } 125: 126: /** 127: * Creates a new data buffer backed by the specified data banks. 128: * 129: * @param dataArray the data banks. 130: * @param size the number of elements in the data bank. 131: * 132: * @throws NullPointerException if <code>dataArray</code> is 133: * <code>null</code>. 134: */ 135: public DataBufferByte(byte[][] dataArray, int size) 136: { 137: super(TYPE_BYTE, size, dataArray.length); 138: bankData = dataArray; 139: data = bankData[0]; 140: } 141: 142: /** 143: * Creates a new data buffer backed by the specified data banks, with 144: * the specified offsets to the first element in each bank. 145: * 146: * @param dataArray the data banks. 147: * @param size the number of elements in the data bank. 148: * @param offsets the offsets to the first element in each data bank. 149: * 150: * @throws NullPointerException if <code>dataArray</code> is 151: * <code>null</code>. 152: */ 153: public DataBufferByte(byte[][] dataArray, int size, int[] offsets) 154: { 155: super(TYPE_BYTE, size, dataArray.length, offsets); 156: bankData = dataArray; 157: data = bankData[0]; 158: } 159: 160: /** 161: * Returns the first data bank. 162: * 163: * @return The first data bank. 164: */ 165: public byte[] getData() 166: { 167: return data; 168: } 169: 170: /** 171: * Returns a data bank. 172: * 173: * @param bank the bank index. 174: * @return A data bank. 175: */ 176: public byte[] getData(int bank) 177: { 178: return bankData[bank]; 179: } 180: 181: /** 182: * Returns the array underlying this <code>DataBuffer</code>. 183: * 184: * @return The data banks. 185: */ 186: public byte[][] getBankData() 187: { 188: return bankData; 189: } 190: 191: /** 192: * Returns an element from the first data bank. The offset (specified in 193: * the constructor) is added to <code>i</code> before accessing the 194: * underlying data array. 195: * 196: * @param i the element index. 197: * @return The element. 198: */ 199: public int getElem(int i) 200: { 201: return data[i+offset] & 0xff; // get unsigned byte as int 202: } 203: 204: /** 205: * Returns an element from a particular data bank. The offset (specified in 206: * the constructor) is added to <code>i</code> before accessing the 207: * underlying data array. 208: * 209: * @param bank the bank index. 210: * @param i the element index. 211: * @return The element. 212: */ 213: public int getElem(int bank, int i) 214: { 215: // get unsigned byte as int 216: return bankData[bank][i+offsets[bank]] & 0xff; 217: } 218: 219: /** 220: * Sets an element in the first data bank. The offset (specified in the 221: * constructor) is added to <code>i</code> before updating the underlying 222: * data array. 223: * 224: * @param i the element index. 225: * @param val the new element value. 226: */ 227: public void setElem(int i, int val) 228: { 229: data[i+offset] = (byte) val; 230: } 231: 232: /** 233: * Sets an element in a particular data bank. The offset (specified in the 234: * constructor) is added to <code>i</code> before updating the underlying 235: * data array. 236: * 237: * @param bank the data bank index. 238: * @param i the element index. 239: * @param val the new element value. 240: */ 241: public void setElem(int bank, int i, int val) 242: { 243: bankData[bank][i+offsets[bank]] = (byte) val; 244: } 245: }