History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/awt/image/DataBufferByte.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/awt/image/DataBufferByte.java+286−0
@@ -0,0 +1,286 @@
1+/*
2+ * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+/* ****************************************************************
27+ ******************************************************************
28+ ******************************************************************
29+ *** COPYRIGHT (c) Eastman Kodak Company, 1997
30+ *** As an unpublished work pursuant to Title 17 of the United
31+ *** States Code. All rights reserved.
32+ ******************************************************************
33+ ******************************************************************
34+ ******************************************************************/
35+
36+package java.awt.image;
37+
38+import static sun.java2d.StateTrackable.State.*;
39+
40+/**
41+ * This class extends <CODE>DataBuffer</CODE> and stores data internally as bytes.
42+ * Values stored in the byte array(s) of this <CODE>DataBuffer</CODE> are treated as
43+ * unsigned values.
44+ * <p>
45+ * <a name="optimizations">
46+ * Note that some implementations may function more efficiently
47+ * if they can maintain control over how the data for an image is
48+ * stored.
49+ * For example, optimizations such as caching an image in video
50+ * memory require that the implementation track all modifications
51+ * to that data.
52+ * Other implementations may operate better if they can store the
53+ * data in locations other than a Java array.
54+ * To maintain optimum compatibility with various optimizations
55+ * it is best to avoid constructors and methods which expose the
56+ * underlying storage as a Java array, as noted below in the
57+ * documentation for those methods.
58+ * </a>
59+ */
60+public final class DataBufferByte extends DataBuffer
61+{
62+ /** The default data bank. */
63+ byte data[];
64+
65+ /** All data banks */
66+ byte bankdata[][];
67+
68+ /**
69+ * Constructs a byte-based <CODE>DataBuffer</CODE> with a single bank and the
70+ * specified size.
71+ *
72+ * @param size The size of the <CODE>DataBuffer</CODE>.
73+ */
74+ public DataBufferByte(int size) {
75+ super(STABLE, TYPE_BYTE, size);
76+ data = new byte[size];
77+ bankdata = new byte[1][];
78+ bankdata[0] = data;
79+ }
80+
81+ /**
82+ * Constructs a byte based <CODE>DataBuffer</CODE> with the specified number of
83+ * banks all of which are the specified size.
84+ *
85+ * @param size The size of the banks in the <CODE>DataBuffer</CODE>.
86+ * @param numBanks The number of banks in the a<CODE>DataBuffer</CODE>.
87+ */
88+ public DataBufferByte(int size, int numBanks) {
89+ super(STABLE, TYPE_BYTE, size, numBanks);
90+ bankdata = new byte[numBanks][];
91+ for (int i= 0; i < numBanks; i++) {
92+ bankdata[i] = new byte[size];
93+ }
94+ data = bankdata[0];
95+ }
96+
97+ /**
98+ * Constructs a byte-based <CODE>DataBuffer</CODE> with a single bank using the
99+ * specified array.
100+ * Only the first <CODE>size</CODE> elements should be used by accessors of
101+ * this <CODE>DataBuffer</CODE>. <CODE>dataArray</CODE> must be large enough to
102+ * hold <CODE>size</CODE> elements.
103+ * <p>
104+ * Note that {@code DataBuffer} objects created by this constructor
105+ * may be incompatible with <a href="#optimizations">performance
106+ * optimizations</a> used by some implementations (such as caching
107+ * an associated image in video memory).
108+ *
109+ * @param dataArray The byte array for the <CODE>DataBuffer</CODE>.
110+ * @param size The size of the <CODE>DataBuffer</CODE> bank.
111+ */
112+ public DataBufferByte(byte dataArray[], int size) {
113+ super(UNTRACKABLE, TYPE_BYTE, size);
114+ data = dataArray;
115+ bankdata = new byte[1][];
116+ bankdata[0] = data;
117+ }
118+
119+ /**
120+ * Constructs a byte-based <CODE>DataBuffer</CODE> with a single bank using the
121+ * specified array, size, and offset. <CODE>dataArray</CODE> must have at least
122+ * <CODE>offset</CODE> + <CODE>size</CODE> elements. Only elements <CODE>offset</CODE>
123+ * through <CODE>offset</CODE> + <CODE>size</CODE> - 1
124+ * should be used by accessors of this <CODE>DataBuffer</CODE>.
125+ * <p>
126+ * Note that {@code DataBuffer} objects created by this constructor
127+ * may be incompatible with <a href="#optimizations">performance
128+ * optimizations</a> used by some implementations (such as caching
129+ * an associated image in video memory).
130+ *
131+ * @param dataArray The byte array for the <CODE>DataBuffer</CODE>.
132+ * @param size The size of the <CODE>DataBuffer</CODE> bank.
133+ * @param offset The offset into the <CODE>dataArray</CODE>. <CODE>dataArray</CODE>
134+ * must have at least <CODE>offset</CODE> + <CODE>size</CODE> elements.
135+ */
136+ public DataBufferByte(byte dataArray[], int size, int offset){
137+ super(UNTRACKABLE, TYPE_BYTE, size, 1, offset);
138+ data = dataArray;
139+ bankdata = new byte[1][];
140+ bankdata[0] = data;
141+ }
142+
143+ /**
144+ * Constructs a byte-based <CODE>DataBuffer</CODE> with the specified arrays.
145+ * The number of banks is equal to <CODE>dataArray.length</CODE>.
146+ * Only the first <CODE>size</CODE> elements of each array should be used by
147+ * accessors of this <CODE>DataBuffer</CODE>.
148+ * <p>
149+ * Note that {@code DataBuffer} objects created by this constructor
150+ * may be incompatible with <a href="#optimizations">performance
151+ * optimizations</a> used by some implementations (such as caching
152+ * an associated image in video memory).
153+ *
154+ * @param dataArray The byte arrays for the <CODE>DataBuffer</CODE>.
155+ * @param size The size of the banks in the <CODE>DataBuffer</CODE>.
156+ */
157+ public DataBufferByte(byte dataArray[][], int size) {
158+ super(UNTRACKABLE, TYPE_BYTE, size, dataArray.length);
159+ bankdata = (byte[][]) dataArray.clone();
160+ data = bankdata[0];
161+ }
162+
163+ /**
164+ * Constructs a byte-based <CODE>DataBuffer</CODE> with the specified arrays, size,
165+ * and offsets.
166+ * The number of banks is equal to <CODE>dataArray.length</CODE>. Each array must
167+ * be at least as large as <CODE>size</CODE> + the corresponding <CODE>offset</CODE>.
168+ * There must be an entry in the <CODE>offset</CODE> array for each <CODE>dataArray</CODE>
169+ * entry. For each bank, only elements <CODE>offset</CODE> through
170+ * <CODE>offset</CODE> + <CODE>size</CODE> - 1 should be used by accessors of this
171+ * <CODE>DataBuffer</CODE>.
172+ * <p>
173+ * Note that {@code DataBuffer} objects created by this constructor
174+ * may be incompatible with <a href="#optimizations">performance
175+ * optimizations</a> used by some implementations (such as caching
176+ * an associated image in video memory).
177+ *
178+ * @param dataArray The byte arrays for the <CODE>DataBuffer</CODE>.
179+ * @param size The size of the banks in the <CODE>DataBuffer</CODE>.
180+ * @param offsets The offsets into each array.
181+ */
182+ public DataBufferByte(byte dataArray[][], int size, int offsets[]) {
183+ super(UNTRACKABLE, TYPE_BYTE, size, dataArray.length, offsets);
184+ bankdata = (byte[][]) dataArray.clone();
185+ data = bankdata[0];
186+ }
187+
188+ /**
189+ * Returns the default (first) byte data array.
190+ * <p>
191+ * Note that calling this method may cause this {@code DataBuffer}
192+ * object to be incompatible with <a href="#optimizations">performance
193+ * optimizations</a> used by some implementations (such as caching
194+ * an associated image in video memory).
195+ *
196+ * @return The first byte data array.
197+ */
198+ public byte[] getData() {
199+ theTrackable.setUntrackable();
200+ return data;
201+ }
202+
203+ /**
204+ * Returns the data array for the specified bank.
205+ * <p>
206+ * Note that calling this method may cause this {@code DataBuffer}
207+ * object to be incompatible with <a href="#optimizations">performance
208+ * optimizations</a> used by some implementations (such as caching
209+ * an associated image in video memory).
210+ *
211+ * @param bank The bank whose data array you want to get.
212+ * @return The data array for the specified bank.
213+ */
214+ public byte[] getData(int bank) {
215+ theTrackable.setUntrackable();
216+ return bankdata[bank];
217+ }
218+
219+ /**
220+ * Returns the data arrays for all banks.
221+ * <p>
222+ * Note that calling this method may cause this {@code DataBuffer}
223+ * object to be incompatible with <a href="#optimizations">performance
224+ * optimizations</a> used by some implementations (such as caching
225+ * an associated image in video memory).
226+ *
227+ * @return All of the data arrays.
228+ */
229+ public byte[][] getBankData() {
230+ theTrackable.setUntrackable();
231+ return (byte[][]) bankdata.clone();
232+ }
233+
234+ /**
235+ * Returns the requested data array element from the first (default) bank.
236+ *
237+ * @param i The data array element you want to get.
238+ * @return The requested data array element as an integer.
239+ * @see #setElem(int, int)
240+ * @see #setElem(int, int, int)
241+ */
242+ public int getElem(int i) {
243+ return (int)(data[i+offset]) & 0xff;
244+ }
245+
246+ /**
247+ * Returns the requested data array element from the specified bank.
248+ *
249+ * @param bank The bank from which you want to get a data array element.
250+ * @param i The data array element you want to get.
251+ * @return The requested data array element as an integer.
252+ * @see #setElem(int, int)
253+ * @see #setElem(int, int, int)
254+ */
255+ public int getElem(int bank, int i) {
256+ return (int)(bankdata[bank][i+offsets[bank]]) & 0xff;
257+ }
258+
259+ /**
260+ * Sets the requested data array element in the first (default) bank
261+ * to the specified value.
262+ *
263+ * @param i The data array element you want to set.
264+ * @param val The integer value to which you want to set the data array element.
265+ * @see #getElem(int)
266+ * @see #getElem(int, int)
267+ */
268+ public void setElem(int i, int val) {
269+ data[i+offset] = (byte)val;
270+ theTrackable.markDirty();
271+ }
272+
273+ /**
274+ * Sets the requested data array element in the specified bank
275+ * from the given integer.
276+ * @param bank The bank in which you want to set the data array element.
277+ * @param i The data array element you want to set.
278+ * @param val The integer value to which you want to set the specified data array element.
279+ * @see #getElem(int)
280+ * @see #getElem(int, int)
281+ */
282+ public void setElem(int bank, int i, int val) {
283+ bankdata[bank][i+offsets[bank]] = (byte)val;
284+ theTrackable.markDirty();
285+ }
286+}