Save This Page
Home » openjdk-7 » java » nio » [javadoc | source]
    1   /* IntBufferImpl.java -- 
    2      Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
    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   
   39   package java.nio;
   40   
   41   /**
   42    * This is a Heap memory implementation
   43    */
   44   final class IntBufferImpl extends IntBuffer
   45   {
   46     private boolean readOnly;
   47   
   48     IntBufferImpl (int capacity)
   49     {
   50       this (new int [capacity], 0, capacity, capacity, 0, -1, false);
   51     }
   52     
   53     IntBufferImpl (int[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
   54     {
   55       super (capacity, limit, position, mark);
   56       this.backing_buffer = buffer;
   57       this.array_offset = offset;
   58       this.readOnly = readOnly;
   59     }
   60     
   61     public boolean isReadOnly ()
   62     {
   63       return readOnly;
   64     }
   65     
   66     public IntBuffer slice ()
   67     {
   68       return new IntBufferImpl (backing_buffer, array_offset + position (), remaining (), remaining (), 0, -1, isReadOnly ());
   69     }
   70     
   71     public IntBuffer duplicate ()
   72     {
   73       return new IntBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, isReadOnly ());
   74     }
   75     
   76     public IntBuffer asReadOnlyBuffer ()
   77     {
   78       return new IntBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true);
   79     }
   80     
   81     public IntBuffer compact ()
   82     {
   83       checkIfReadOnly();
   84       mark = -1;
   85       int p = position();
   86       int n = limit() - p;
   87       if (n > 0)
   88         {
   89           System.arraycopy(backing_buffer, array_offset + p,
   90                            backing_buffer, array_offset, n);
   91         }
   92       position(n);
   93       limit(capacity());
   94       return this;
   95     }
   96     
   97     public boolean isDirect ()
   98     {
   99       return false;
  100     }
  101   
  102     /**
  103      * Reads the <code>int</code> at this buffer's current position,
  104      * and then increments the position.
  105      *
  106      * @exception BufferUnderflowException If there are no remaining
  107      * <code>ints</code> in this buffer.
  108      */
  109     public int get ()
  110     {
  111       checkForUnderflow();
  112   
  113       int result = backing_buffer [position ()];
  114       position (position () + 1);
  115       return result;
  116     }
  117     
  118     /**
  119      * Relative put method. Writes <code>value</code> to the next position
  120      * in the buffer.
  121      *
  122      * @exception BufferOverflowException If there no remaining 
  123      * space in this buffer.
  124      * @exception ReadOnlyBufferException If this buffer is read-only.
  125      */
  126     public IntBuffer put (int value)
  127     {
  128       checkIfReadOnly();
  129       checkForOverflow();
  130   
  131       backing_buffer [position ()] = value;
  132       position (position () + 1);
  133       return this;
  134     }
  135     
  136     /**
  137      * Absolute get method. Reads the <code>int</code> at position
  138      * <code>index</code>.
  139      *
  140      * @exception IndexOutOfBoundsException If index is negative or not smaller
  141      * than the buffer's limit.
  142      */
  143     public int get (int index)
  144     {
  145       checkIndex(index);
  146   
  147       return backing_buffer [index];
  148     }
  149     
  150     /**
  151      * Absolute put method. Writes <code>value</code> to position
  152      * <code>index</code> in the buffer.
  153      *
  154      * @exception IndexOutOfBoundsException If index is negative or not smaller
  155      * than the buffer's limit.
  156      * @exception ReadOnlyBufferException If this buffer is read-only.
  157      */
  158     public IntBuffer put (int index, int value)
  159     {
  160       checkIfReadOnly();
  161       checkIndex(index);
  162   
  163       backing_buffer [index] = value;
  164       return this;
  165     }
  166     
  167     public ByteOrder order ()
  168     {
  169       return ByteOrder.nativeOrder ();
  170     }
  171   }

Save This Page
Home » openjdk-7 » java » nio » [javadoc | source]