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