1 /*
   2  * Copyright (c) 2011, 2012, 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      */
  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      */
  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      */
  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      */
  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      */
  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      */
  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      */
 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      */
 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      */
 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      */
 147     public void setElem(int bank, int i, int val) {
 148         bankdata[bank].put(i+offsets[bank], val);
 149     }
 150 
 151     ByteBuffer getBufferOfSize(int size)
 152     {
 153         ByteBuffer buffer = ByteBuffer.allocateDirect(size);
 154         buffer.order(ByteOrder.nativeOrder());
 155         return buffer;
 156     }
 157 }