DataBufferDouble.java
上传用户:btjssb159
上传日期:2018-01-04
资源大小:241k
文件大小:11k
源码类别:

DNA

开发平台:

Java

  1. /*
  2.  * Copyright (c) 2001 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without 
  5.  * modification, are permitted provided that the following conditions are met:
  6.  * 
  7.  * -Redistributions of source code must retain the above copyright notice, this 
  8.  * list of conditions and the following disclaimer.
  9.  *
  10.  * -Redistribution in binary form must reproduct the above copyright notice,
  11.  * this list of conditions and the following disclaimer in the documentation
  12.  * and/or other materials provided with the distribution.
  13.  * 
  14.  * Neither the name of Sun Microsystems, Inc. or the names of contributors may
  15.  * be used to endorse or promote products derived from this software without
  16.  * specific prior written permission.
  17.  * 
  18.  * This software is provided "AS IS," without a warranty of any kind. ALL
  19.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  20.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  21.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  22.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  23.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  24.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  25.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  26.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  27.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  28.  * POSSIBILITY OF SUCH DAMAGES.
  29.  * 
  30.  * You acknowledge that Software is not designed,licensed or intended for use in 
  31.  * the design, construction, operation or maintenance of any nuclear facility.
  32.  */
  33. import java.awt.image.DataBuffer;
  34. /**
  35.  * An extension of <code>DataBuffer</code> that stores data internally
  36.  * in <code>double</code> form.
  37.  *
  38.  * @see java.awt.image.DataBuffer
  39.  */
  40. public class DataBufferDouble extends DataBuffer {
  41.     /** The array of data banks. */
  42.     protected double bankdata[][];
  43.     /** A reference to the default data bank. */
  44.     protected double data[];
  45.     /**
  46.      * Constructs a <code>double</code>-based <code>DataBuffer</code>
  47.      * with a specified size.
  48.      *
  49.      * @param size The number of elements in the <code>DataBuffer</code>.
  50.      */
  51.     public DataBufferDouble(int size) {
  52.         super(TYPE_DOUBLE, size);
  53.         data = new double[size];
  54.         bankdata = new double[1][];
  55.         bankdata[0] = data;
  56.     }
  57.     /**
  58.      * Constructs a <code>double</code>-based <code>DataBuffer</code>
  59.      * with a specified number of banks, all of which are of a
  60.      * specified size.
  61.      *
  62.      * @param size The number of elements in each bank of the
  63.      *        <code>DataBuffer</code>.
  64.      * @param numBanks The number of banks in the <code>DataBuffer</code>.
  65.      */
  66.     public DataBufferDouble(int size, int numBanks) {
  67.         super(TYPE_DOUBLE, size, numBanks);
  68.         bankdata = new double[numBanks][];
  69.         for (int i= 0; i < numBanks; i++) {
  70.             bankdata[i] = new double[size];
  71.         }
  72.         data = bankdata[0];
  73.     }
  74.     /**
  75.      * Constructs a <code>double</code>-based <code>DataBuffer</code>
  76.      * with the specified data array.  Only the first
  77.      * <code>size</code> elements are available for use by this
  78.      * <code>DataBuffer</code>.  The array must be large enough to
  79.      * hold <code>size</code> elements.
  80.      *
  81.      * @param dataArray An array of <code>double</code>s to be used as the
  82.      *                  first and only bank of this <code>DataBuffer</code>.
  83.      * @param size The number of elements of the array to be used.
  84.      */
  85.     public DataBufferDouble(double dataArray[], int size) {
  86.         super(TYPE_DOUBLE, size);
  87. if (dataArray.length < size)
  88.   throw new RuntimeException(JaiI18N.getString("DataBuffer0"));
  89.         data = dataArray;
  90.         bankdata = new double[1][];
  91.         bankdata[0] = data;
  92.     }
  93.     /**
  94.      * Constructs a <code>double</code>-based <code>DataBuffer</code>
  95.      * with the specified data array.  Only the elements between
  96.      * <code>offset</code> and <code>offset + size - 1</code> are
  97.      * available for use by this <code>DataBuffer</code>.  The array
  98.      * must be large enough to hold <code>offset + size</code> elements.
  99.      *
  100.      * @param dataArray An array of <code>double</code>s to be used as the
  101.      *                  first and only bank of this <code>DataBuffer</code>.
  102.      * @param size The number of elements of the array to be used.
  103.      * @param offset The offset of the first element of the array
  104.      *               that will be used.
  105.      */
  106.     public DataBufferDouble(double dataArray[], int size, int offset) {
  107.         super(TYPE_DOUBLE, size, 1, offset);
  108. if (dataArray.length < size)
  109.   throw new RuntimeException(JaiI18N.getString("DataBuffer1"));
  110.         data = dataArray;
  111.         bankdata = new double[1][];
  112.         bankdata[0] = data;
  113.     }
  114.     /**
  115.      * Constructs a <code>double</code>-based <code>DataBuffer</code>
  116.      * with the specified data arrays.  Only the first
  117.      * <code>size</code> elements of each array are available for use
  118.      * by this <code>DataBuffer</code>.  The number of banks will be
  119.      * equal <code>to dataArray.length</code>.
  120.      *
  121.      * @param dataArray An array of arrays of <code>double</code>s to be
  122.      *        used as the banks of this <code>DataBuffer</code>.
  123.      * @param size The number of elements of each array to be used.
  124.      */
  125.     public DataBufferDouble(double dataArray[][], int size) {
  126.         super(TYPE_DOUBLE, size, dataArray.length);
  127.         bankdata = dataArray;
  128.         data = bankdata[0];
  129.     }
  130.     /**
  131.      * Constructs a <code>double</code>-based <code>DataBuffer</code>
  132.      * with the specified data arrays, size, and per-bank offsets.
  133.      * The number of banks is equal to dataArray.length.  Each array
  134.      * must be at least as large as <code>size plus the corresponding
  135.      * offset.  There must be an entry in the <code>offsets</code>
  136.      * array for each data array.
  137.      *
  138.      * @param dataArray An array of arrays of <code>double</code>s to be
  139.      *        used as the banks of this <code>DataBuffer</code>.
  140.      * @param size The number of elements of each array to be used.
  141.      * @param offsets An array of integer offsets, one for each bank.
  142.      */
  143.     public DataBufferDouble(double dataArray[][], int size, int offsets[]) {
  144.         super(TYPE_DOUBLE, size, dataArray.length, offsets);
  145.         bankdata = dataArray;
  146.         data = bankdata[0];
  147.     }
  148.   /** Returns the <code>double</code> data array of the default(first) bank. */
  149.     public double[] getData() {
  150.         return data;
  151.     }
  152.     /** Returns the data array for the specified bank. */
  153.     public double[] getData(int bank) {
  154.         return bankdata[bank];
  155.     }
  156.     /** Returns the data array for all banks. */
  157.     public double[][] getBankData() {
  158.         return bankdata;
  159.     }
  160.     
  161.     /**
  162.      * Returns the requested data array element from the first
  163.      * (default) bank as an <code>int</code>.
  164.      *
  165.      * @param i The desired data array element.
  166.      *
  167.      * @return The data entry as an <code>int</code>.
  168.      */
  169.     public int getElem(int i) {
  170.         return (int)(data[i+offset]);
  171.     }
  172.     /**
  173.      * Returns the requested data array element from the specified
  174.      * bank as an <code>int</code>.
  175.      *
  176.      * @param bank The bank number.
  177.      * @param i The desired data array element.
  178.      *
  179.      * @return The data entry as an <code>int</code>.
  180.      */
  181.     public int getElem(int bank, int i) {
  182.         return (int)(bankdata[bank][i+offsets[bank]]);
  183.     }
  184.     /**
  185.      * Sets the requested data array element in the first (default)
  186.      * bank to the given <code>int</code>.
  187.      *
  188.      * @param i The desired data array element.
  189.      * @param val The value to be set.
  190.      */
  191.     public void setElem(int i, int val) {
  192.         data[i+offset] = (double)val;
  193.     }
  194.     /**
  195.      * Sets the requested data array element in the specified bank
  196.      * to the given <code>int</code>.
  197.      *
  198.      * @param bank The bank number.
  199.      * @param i The desired data array element.
  200.      * @param val The value to be set.
  201.      */
  202.     public void setElem(int bank, int i, int val) {
  203.         bankdata[bank][i+offsets[bank]] = (double)val;
  204.     }
  205.     /**
  206.      * Returns the requested data array element from the first
  207.      * (default) bank as a <code>float</code>.
  208.      *
  209.      * @param i The desired data array element.
  210.      *
  211.      * @return The data entry as a <code>float</code>.
  212.      */
  213.     public float getElemFloat(int i) {
  214.         return (float)data[i+offset];
  215.     }
  216.  
  217.     /**
  218.      * Returns the requested data array element from the specified
  219.      * bank as a <code>float</code>.
  220.      *
  221.      * @param bank The bank number.
  222.      * @param i The desired data array element.
  223.      *
  224.      * @return The data entry as a <code>float</code>.
  225.      */
  226.     public float getElemFloat(int bank, int i) {
  227.         return (float)bankdata[bank][i+offsets[bank]];
  228.     }
  229.  
  230.     /**
  231.      * Sets the requested data array element in the first (default)
  232.      * bank to the given <code>float</code>.
  233.      *
  234.      * @param i The desired data array element.
  235.      * @param val The value to be set.
  236.      */
  237.     public void setElemFloat(int i, float val) {
  238.         data[i+offset] = (double)val;
  239.     }
  240.  
  241.     /**
  242.      * Sets the requested data array element in the specified bank to
  243.      * the given <code>float</code>.
  244.      *
  245.      * @param bank The bank number.
  246.      * @param i The desired data array element.
  247.      * @param val The value to be set.
  248.      */
  249.     public void setElemFloat(int bank, int i, float val) {
  250.         bankdata[bank][i+offsets[bank]] = (double)val;
  251.     }
  252.     /**
  253.      * Returns the requested data array element from the first
  254.      * (default) bank as a <code>double</code>.
  255.      *
  256.      * @param i The desired data array element.
  257.      *
  258.      * @return The data entry as a <code>double</code>.
  259.      */
  260.     public double getElemDouble(int i) {
  261.         return data[i+offset];
  262.     }
  263.  
  264.     /**
  265.      * Returns the requested data array element from the specified
  266.      * bank as a <code>double</code>.
  267.      *
  268.      * @param bank The bank number.
  269.      * @param i The desired data array element.
  270.      *
  271.      * @return The data entry as a <code>double</code>.
  272.      */
  273.     public double getElemDouble(int bank, int i) {
  274.         return bankdata[bank][i+offsets[bank]];
  275.     }
  276.  
  277.     /**
  278.      * Sets the requested data array element in the first (default)
  279.      * bank to the given <code>double</code>.
  280.      *
  281.      * @param i The desired data array element.
  282.      * @param val The value to be set.
  283.      */
  284.     public void setElemDouble(int i, double val) {
  285.         data[i+offset] = val;
  286.     }
  287.  
  288.     /**
  289.      * Sets the requested data array element in the specified bank to
  290.      * the given <code>double</code>.
  291.      *
  292.      * @param bank The bank number.
  293.      * @param i The desired data array element.
  294.      * @param val The value to be set.
  295.      */
  296.     public void setElemDouble(int bank, int i, double val) {
  297.         bankdata[bank][i+offsets[bank]] = val;
  298.     }
  299. }