1 /*
2  * Copyright (c) 2011, 2018, 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 package sun.java2d;
27 
28 import java.awt.image.DataBuffer;
29 import java.nio.*;
30 
31 public final class DataBufferNIOInt extends DataBuffer {
32 
33     /** The default data bank. */
34     IntBuffer data;
35 
36     /** All data banks */
37     IntBuffer[] bankdata;
38 
39     /**
40      * Constructs an integer-based {@code DataBuffer} with a single bank
41      * and the specified size.
42      *
43      * @param size The size of the {@code DataBuffer}.
44      */
DataBufferNIOInt(int size)45     public DataBufferNIOInt(int size) {
46         super(TYPE_INT,size);
47         //+++gdb how to get sizeof(int) in java? Using 4 for now.
48         data = getBufferOfSize(size * 4).asIntBuffer();
49         bankdata = new IntBuffer[1];
50         bankdata[0] = data;
51     }
52 
53     /**
54      * Returns the default (first) IntBuffer in {@code DataBuffer}.
55      *
56      * @return The first IntBuffer.
57      */
getBuffer()58     public IntBuffer getBuffer() {
59         return data;
60     }
61 
62     /**
63      * Returns the Buffer for the specified bank.
64      *
65      * @param bank The bank whose Buffer you want to get.
66      * @return The Buffer for the specified bank.
67      */
getBuffer(int bank)68     public IntBuffer getBuffer(int bank) {
69         return bankdata[bank];
70     }
71 
72     /**
73      * Returns the default (first) int data array in {@code DataBuffer}.
74      *
75      * @return The first integer data array.
76      */
getData()77     public int[] getData() {
78         return data.array();
79     }
80 
81     /**
82      * Returns the data array for the specified bank.
83      *
84      * @param bank The bank whose data array you want to get.
85      * @return The data array for the specified bank.
86      */
getData(int bank)87     public int[] getData(int bank) {
88         return bankdata[bank].array();
89     }
90 
91     /**
92      * Returns the data arrays for all banks.
93      * @return All of the data arrays.
94      */
getBankData()95     public int[][] getBankData() {
96         // Unsupported.
97         return null;
98     }
99 
100     /**
101      * Returns the requested data array element from the first (default) bank.
102      *
103      * @param i The data array element you want to get.
104      * @return The requested data array element as an integer.
105      * @see #setElem(int, int)
106      * @see #setElem(int, int, int)
107      */
getElem(int i)108     public int getElem(int i) {
109         return data.get(i+offset);
110     }
111 
112     /**
113      * Returns the requested data array element from the specified bank.
114      *
115      * @param bank The bank from which you want to get a data array element.
116      * @param i The data array element you want to get.
117      * @return The requested data array element as an integer.
118      * @see #setElem(int, int)
119      * @see #setElem(int, int, int)
120      */
getElem(int bank, int i)121     public int getElem(int bank, int i) {
122         return bankdata[bank].get(i+offsets[bank]);
123     }
124 
125     /**
126      * Sets the requested data array element in the first (default) bank
127      * to the specified value.
128      *
129      * @param i The data array element you want to set.
130      * @param val The integer value to which you want to set the data array element.
131      * @see #getElem(int)
132      * @see #getElem(int, int)
133      */
setElem(int i, int val)134     public void setElem(int i, int val) {
135         data.put(i+offset, val);
136     }
137 
138     /**
139      * Sets the requested data array element in the specified bank
140      * to the integer value {@code i}.
141      * @param bank The bank in which you want to set the data array element.
142      * @param i The data array element you want to set.
143      * @param val The integer value to which you want to set the specified data array element.
144      * @see #getElem(int)
145      * @see #getElem(int, int)
146      */
setElem(int bank, int i, int val)147     public void setElem(int bank, int i, int val) {
148         bankdata[bank].put(i+offsets[bank], val);
149     }
150 
getBufferOfSize(int size)151     ByteBuffer getBufferOfSize(int size)
152     {
153         ByteBuffer buffer = ByteBuffer.allocateDirect(size);
154         buffer.order(ByteOrder.nativeOrder());
155         return buffer;
156     }
157 }
158