You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/04/19 16:45:32 UTC

svn commit: r161900 - directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java directory/network/trunk/src/java/org/apache/mina/common/ByteBufferProxy.java

Author: trustin
Date: Tue Apr 19 07:45:31 2005
New Revision: 161900

URL: http://svn.apache.org/viewcvs?view=rev&rev=161900
Log:
* Separated nio buffer pool and mina buffer pool
* Reformatted ByteBufferProxy

Modified:
    directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java
    directory/network/trunk/src/java/org/apache/mina/common/ByteBufferProxy.java

Modified: directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java?view=diff&r1=161899&r2=161900
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java Tue Apr 19 07:45:31 2005
@@ -71,6 +71,8 @@
 {
     private static final int MINIMUM_CAPACITY = 1;
 
+    private static final Stack containerStack = new Stack();
+
     private static final Stack[] heapBufferStacks = new Stack[] {
             new Stack(), new Stack(), new Stack(), new Stack(),
             new Stack(), new Stack(), new Stack(), new Stack(),
@@ -122,32 +124,64 @@
      */
     public static ByteBuffer allocate( int capacity, boolean direct )
     {
+        java.nio.ByteBuffer nioBuffer = allocate0( capacity, direct );
+        DefaultByteBuffer buf;
+        
+        synchronized( containerStack )
+        {
+            buf = ( DefaultByteBuffer ) containerStack.pop();
+        }
+        
+        if( buf == null )
+        {
+            buf = new DefaultByteBuffer();
+        }
+
+        buf.init( nioBuffer );
+        return buf;
+    }
+    
+    private static java.nio.ByteBuffer allocate0( int capacity, boolean direct )
+    {
         Stack[] bufferStacks = direct? directBufferStacks : heapBufferStacks;
         int idx = getBufferStackIndex( bufferStacks, capacity );
         Stack stack = bufferStacks[ idx ];
 
-        DefaultByteBuffer buf;
+        java.nio.ByteBuffer buf;
         synchronized( stack )
         {
-            buf = ( DefaultByteBuffer ) stack.pop();
-            if( buf == null )
-            {
-                buf = new DefaultByteBuffer( MINIMUM_CAPACITY << idx, direct );
-            }
+            buf = ( java.nio.ByteBuffer ) stack.pop();
         }
 
+        if( buf == null )
+        {
+            buf = direct ? java.nio.ByteBuffer.allocateDirect( MINIMUM_CAPACITY << idx ) :
+                           java.nio.ByteBuffer.allocate( MINIMUM_CAPACITY << idx );
+        }
+        
         buf.clear();
-        buf.init();
-
         return buf;
     }
     
+    private static void release0( java.nio.ByteBuffer buf )
+    {
+        Stack[] bufferStacks = buf.isDirect()? directBufferStacks : heapBufferStacks;
+        Stack stack = bufferStacks[ getBufferStackIndex( bufferStacks, buf.capacity() ) ];
+        synchronized( stack )
+        {
+            // push back
+            stack.push( buf );
+        }
+    }
+    
     /**
      * Wraps the specified NIO {@link java.nio.ByteBuffer} into MINA buffer.
      */
     public static ByteBuffer wrap( java.nio.ByteBuffer nioBuffer )
     {
-        return new DefaultByteBuffer( nioBuffer );
+        DefaultByteBuffer buf = new DefaultByteBuffer();
+        buf.init( nioBuffer );
+        return buf;
     }
     
     private static int getBufferStackIndex( Stack[] bufferStacks, int size )
@@ -421,23 +455,13 @@
         private int refCount = 1;
         private boolean autoExpand;
 
-        protected DefaultByteBuffer( java.nio.ByteBuffer buf )
-        {
-            if( buf == null )
-            {
-                throw new NullPointerException( "buf" );
-            }
-            this.buf = buf;
-        }
-
-        protected DefaultByteBuffer( int capacity, boolean direct )
+        protected DefaultByteBuffer()
         {
-            this( direct? java.nio.ByteBuffer.allocateDirect( capacity ) :
-                          java.nio.ByteBuffer.allocate( capacity ) );
         }
 
-        private synchronized void init()
+        private synchronized void init( java.nio.ByteBuffer buf )
         {
+            this.buf = buf;
             autoExpand = false;
             refCount = 1;
         }
@@ -452,30 +476,31 @@
             refCount ++;
         }
 
-        public synchronized void release()
+        public void release()
         {
-            if( refCount <= 0 )
+            synchronized( this )
             {
-                refCount = 0;
-                throw new IllegalStateException(
-                        "Already released buffer.  You released the buffer too many times." );
-            }
+                if( refCount <= 0 )
+                {
+                    refCount = 0;
+                    throw new IllegalStateException(
+                            "Already released buffer.  You released the buffer too many times." );
+                }
 
-            refCount --;
-            if( refCount > 0)
-            {
-                return;
+                refCount --;
+                if( refCount > 0)
+                {
+                    return;
+                }
             }
 
-            Stack[] bufferStacks = isDirect()? directBufferStacks : heapBufferStacks;
-            Stack stack = bufferStacks[ getBufferStackIndex( bufferStacks, capacity() ) ];
-            synchronized( stack )
+            release0( buf );
+            synchronized( containerStack )
             {
-                // push back
-                stack.push( this );
+                containerStack.push( this );
             }
         }
-        
+
         public java.nio.ByteBuffer buf()
         {
             return buf;
@@ -1349,7 +1374,7 @@
             newBuf.limit( limit );
             newBuf.position( pos );
             this.buf = newBuf;
-            new DefaultByteBuffer( oldBuf ).release();
+            release0( oldBuf );
         }
         
         private static void checkFieldSize( int fieldSize )

Modified: directory/network/trunk/src/java/org/apache/mina/common/ByteBufferProxy.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/ByteBufferProxy.java?view=diff&r1=161899&r2=161900
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/ByteBufferProxy.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/ByteBufferProxy.java Tue Apr 19 07:45:31 2005
@@ -39,13 +39,14 @@
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class ByteBufferProxy extends ByteBuffer {
+public class ByteBufferProxy extends ByteBuffer
+{
 
     /**
      * The buffer proxied by this proxy.
      */
     protected ByteBuffer buf;
-    
+
     /**
      * Create a new instance.
      * @param buf the buffer to be proxied
@@ -59,368 +60,449 @@
         this.buf = buf;
     }
 
-    public void acquire() {
+    public void acquire()
+    {
         buf.acquire();
     }
 
-    public void release() {
+    public void release()
+    {
         buf.release();
     }
-    
+
     public boolean isDirect()
     {
         return buf.isDirect();
     }
-    
-    public java.nio.ByteBuffer buf() {
+
+    public java.nio.ByteBuffer buf()
+    {
         return buf.buf();
     }
 
-    public int capacity() {
+    public int capacity()
+    {
         return buf.capacity();
     }
 
-    public int position() {
+    public int position()
+    {
         return buf.position();
     }
 
-    public ByteBuffer position(int newPosition) {
+    public ByteBuffer position( int newPosition )
+    {
         buf.position( newPosition );
         return this;
     }
 
-    public int limit() {
+    public int limit()
+    {
         return buf.limit();
     }
 
-    public ByteBuffer limit(int newLimit) {
+    public ByteBuffer limit( int newLimit )
+    {
         buf.limit( newLimit );
         return this;
     }
 
-    public ByteBuffer mark() {
+    public ByteBuffer mark()
+    {
         buf.mark();
         return this;
     }
 
-    public ByteBuffer reset() {
+    public ByteBuffer reset()
+    {
         buf.reset();
         return this;
     }
 
-    public ByteBuffer clear() {
+    public ByteBuffer clear()
+    {
         buf.clear();
         return this;
     }
 
-    public ByteBuffer flip() {
+    public ByteBuffer flip()
+    {
         buf.flip();
         return this;
     }
 
-    public ByteBuffer rewind() {
+    public ByteBuffer rewind()
+    {
         buf.rewind();
         return this;
     }
 
-    public int remaining() {
+    public int remaining()
+    {
         return buf.remaining();
     }
 
-    public boolean hasRemaining() {
+    public boolean hasRemaining()
+    {
         return buf.hasRemaining();
     }
 
-    public byte get() {
+    public byte get()
+    {
         return buf.get();
     }
 
-    public short getUnsigned() {
+    public short getUnsigned()
+    {
         return buf.getUnsigned();
     }
 
-    public ByteBuffer put(byte b) {
+    public ByteBuffer put( byte b )
+    {
         buf.put( b );
         return this;
     }
 
-    public byte get(int index) {
+    public byte get( int index )
+    {
         return buf.get( index );
     }
 
-    public short getUnsigned(int index) {
+    public short getUnsigned( int index )
+    {
         return buf.getUnsigned( index );
     }
 
-    public ByteBuffer put(int index, byte b) {
+    public ByteBuffer put( int index, byte b )
+    {
         buf.put( index, b );
         return this;
     }
 
-    public ByteBuffer get(byte[] dst, int offset,
-            int length) {
+    public ByteBuffer get( byte[] dst, int offset, int length )
+    {
         buf.get( dst, offset, length );
         return this;
     }
 
-    public ByteBuffer get(byte[] dst) {
+    public ByteBuffer get( byte[] dst )
+    {
         buf.get( dst );
         return this;
     }
 
-    public ByteBuffer put(ByteBuffer src) {
+    public ByteBuffer put( ByteBuffer src )
+    {
         buf.put( src );
         return this;
     }
 
-    public ByteBuffer put(java.nio.ByteBuffer src) {
+    public ByteBuffer put( java.nio.ByteBuffer src )
+    {
         buf.put( src );
         return this;
     }
 
-    public ByteBuffer put(byte[] src, int offset,
-            int length) {
+    public ByteBuffer put( byte[] src, int offset, int length )
+    {
         buf.put( src, offset, length );
         return this;
     }
 
-    public ByteBuffer put(byte[] src) {
+    public ByteBuffer put( byte[] src )
+    {
         buf.put( src );
         return this;
     }
 
-    public ByteBuffer compact() {
+    public ByteBuffer compact()
+    {
         buf.compact();
         return this;
     }
 
-    public String toString() {
+    public String toString()
+    {
         return buf.toString();
     }
 
-    public int hashCode() {
+    public int hashCode()
+    {
         return buf.hashCode();
     }
 
-    public boolean equals(Object ob) {
+    public boolean equals( Object ob )
+    {
         return buf.equals( ob );
     }
 
-    public int compareTo(ByteBuffer that) {
+    public int compareTo( ByteBuffer that )
+    {
         return buf.compareTo( that );
     }
 
-    public ByteOrder order() {
+    public ByteOrder order()
+    {
         return buf.order();
     }
 
-    public ByteBuffer order(ByteOrder bo) {
+    public ByteBuffer order( ByteOrder bo )
+    {
         buf.order( bo );
         return this;
     }
 
-    public char getChar() {
+    public char getChar()
+    {
         return buf.getChar();
     }
 
-    public ByteBuffer putChar(char value) {
+    public ByteBuffer putChar( char value )
+    {
         buf.putChar( value );
         return this;
     }
 
-    public char getChar(int index) {
+    public char getChar( int index )
+    {
         return buf.getChar( index );
     }
 
-    public ByteBuffer putChar(int index, char value) {
+    public ByteBuffer putChar( int index, char value )
+    {
         buf.putChar( index, value );
         return this;
     }
 
-    public CharBuffer asCharBuffer() {
+    public CharBuffer asCharBuffer()
+    {
         return buf.asCharBuffer();
     }
 
-    public short getShort() {
+    public short getShort()
+    {
         return buf.getShort();
     }
 
-    public int getUnsignedShort() {
+    public int getUnsignedShort()
+    {
         return buf.getUnsignedShort();
     }
 
-    public ByteBuffer putShort(short value) {
+    public ByteBuffer putShort( short value )
+    {
         buf.putShort( value );
         return this;
     }
 
-    public short getShort(int index) {
+    public short getShort( int index )
+    {
         return buf.getShort( index );
     }
 
-    public int getUnsignedShort(int index) {
+    public int getUnsignedShort( int index )
+    {
         return buf.getUnsignedShort( index );
     }
 
-    public ByteBuffer putShort(int index, short value) {
+    public ByteBuffer putShort( int index, short value )
+    {
         buf.putShort( index, value );
         return this;
     }
 
-    public ShortBuffer asShortBuffer() {
+    public ShortBuffer asShortBuffer()
+    {
         return buf.asShortBuffer();
     }
 
-    public int getInt() {
+    public int getInt()
+    {
         return buf.getInt();
     }
 
-    public long getUnsignedInt() {
+    public long getUnsignedInt()
+    {
         return buf.getUnsignedInt();
     }
 
-    public ByteBuffer putInt(int value) {
+    public ByteBuffer putInt( int value )
+    {
         buf.putInt( value );
         return this;
     }
 
-    public int getInt(int index) {
+    public int getInt( int index )
+    {
         return buf.getInt( index );
     }
 
-    public long getUnsignedInt(int index) {
+    public long getUnsignedInt( int index )
+    {
         return buf.getUnsignedInt( index );
     }
 
-    public ByteBuffer putInt(int index, int value) {
+    public ByteBuffer putInt( int index, int value )
+    {
         buf.putInt( index, value );
         return this;
     }
 
-    public IntBuffer asIntBuffer() {
+    public IntBuffer asIntBuffer()
+    {
         return buf.asIntBuffer();
     }
 
-    public long getLong() {
+    public long getLong()
+    {
         return buf.getLong();
     }
 
-    public ByteBuffer putLong(long value) {
+    public ByteBuffer putLong( long value )
+    {
         buf.putLong( value );
         return this;
     }
 
-    public long getLong(int index) {
+    public long getLong( int index )
+    {
         return buf.getLong( index );
     }
 
-    public ByteBuffer putLong(int index, long value) {
+    public ByteBuffer putLong( int index, long value )
+    {
         buf.putLong( index, value );
         return this;
     }
 
-    public LongBuffer asLongBuffer() {
+    public LongBuffer asLongBuffer()
+    {
         return buf.asLongBuffer();
     }
 
-    public float getFloat() {
+    public float getFloat()
+    {
         return buf.getFloat();
     }
 
-    public ByteBuffer putFloat(float value) {
+    public ByteBuffer putFloat( float value )
+    {
         buf.putFloat( value );
         return this;
     }
 
-    public float getFloat(int index) {
+    public float getFloat( int index )
+    {
         return buf.getFloat( index );
     }
 
-    public ByteBuffer putFloat(int index, float value) {
+    public ByteBuffer putFloat( int index, float value )
+    {
         buf.putFloat( index, value );
         return this;
     }
 
-    public FloatBuffer asFloatBuffer() {
+    public FloatBuffer asFloatBuffer()
+    {
         return buf.asFloatBuffer();
     }
 
-    public double getDouble() {
+    public double getDouble()
+    {
         return buf.getDouble();
     }
 
-    public ByteBuffer putDouble(double value) {
+    public ByteBuffer putDouble( double value )
+    {
         buf.putDouble( value );
         return this;
     }
 
-    public double getDouble(int index) {
+    public double getDouble( int index )
+    {
         return buf.getDouble( index );
     }
 
-    public ByteBuffer putDouble(int index, double value) {
+    public ByteBuffer putDouble( int index, double value )
+    {
         buf.putDouble( index, value );
         return this;
     }
 
-    public DoubleBuffer asDoubleBuffer() {
+    public DoubleBuffer asDoubleBuffer()
+    {
         return buf.asDoubleBuffer();
     }
 
-    public String getHexDump() {
+    public String getHexDump()
+    {
         return buf.getHexDump();
     }
 
-    public String getString(int fieldSize, CharsetDecoder decoder) throws CharacterCodingException {
+    public String getString( int fieldSize, CharsetDecoder decoder )
+            throws CharacterCodingException
+    {
         return buf.getString( fieldSize, decoder );
     }
 
-    public String getString(CharsetDecoder decoder) throws CharacterCodingException {
+    public String getString( CharsetDecoder decoder )
+            throws CharacterCodingException
+    {
         return buf.getString( decoder );
     }
 
-    public ByteBuffer putString(
-            CharSequence in, int fieldSize, CharsetEncoder encoder) throws CharacterCodingException {
+    public ByteBuffer putString( CharSequence in, int fieldSize,
+                                CharsetEncoder encoder )
+            throws CharacterCodingException
+    {
         buf.putString( in, fieldSize, encoder );
         return this;
     }
 
-    public ByteBuffer putString(
-            CharSequence in, CharsetEncoder encoder) throws CharacterCodingException {
+    public ByteBuffer putString( CharSequence in, CharsetEncoder encoder )
+            throws CharacterCodingException
+    {
         buf.putString( in, encoder );
         return this;
     }
 
-    public ByteBuffer skip(int size) {
+    public ByteBuffer skip( int size )
+    {
         buf.skip( size );
         return this;
     }
 
-    public ByteBuffer fill(byte value, int size) {
+    public ByteBuffer fill( byte value, int size )
+    {
         buf.fill( value, size );
         return this;
     }
 
-    public ByteBuffer fillAndReset(byte value, int size) {
+    public ByteBuffer fillAndReset( byte value, int size )
+    {
         buf.fillAndReset( value, size );
         return this;
     }
 
-    public ByteBuffer fill(int size) {
+    public ByteBuffer fill( int size )
+    {
         buf.fill( size );
         return this;
     }
 
-    public ByteBuffer fillAndReset(int size) {
+    public ByteBuffer fillAndReset( int size )
+    {
         buf.fillAndReset( size );
         return this;
     }
 
-    public boolean isAutoExpand() {
+    public boolean isAutoExpand()
+    {
         return buf.isAutoExpand();
     }
 
-    public ByteBuffer setAutoExpand(boolean autoExpand) {
+    public ByteBuffer setAutoExpand( boolean autoExpand )
+    {
         buf.setAutoExpand( autoExpand );
         return this;
     }