Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 28275 invoked from network); 19 Apr 2005 08:29:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 19 Apr 2005 08:29:33 -0000 Received: (qmail 95098 invoked by uid 500); 19 Apr 2005 08:29:32 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 95024 invoked by uid 500); 19 Apr 2005 08:29:31 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 95008 invoked by uid 99); 19 Apr 2005 08:29:30 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Tue, 19 Apr 2005 01:29:30 -0700 Received: (qmail 28169 invoked by uid 65534); 19 Apr 2005 08:29:29 -0000 Message-ID: <20050419082929.28164.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Mailer: svnmailer-1.0.0-dev Date: Tue, 19 Apr 2005 08:29:29 -0000 Subject: svn commit: r161856 - in directory/network/trunk/src: java/org/apache/mina/common/ByteBuffer.java test/org/apache/mina/common/ByteBufferTest.java To: commits@directory.apache.org From: trustin@apache.org X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: trustin Date: Tue Apr 19 01:29:28 2005 New Revision: 161856 URL: http://svn.apache.org/viewcvs?view=3Drev&rev=3D161856 Log: * Added ByteBuffer.isDirect() and isReadOnly(); * ByteBuffer.duplicate(), slice() and asReadOnly() returns MINA ByteBuffer = now. Modified: directory/network/trunk/src/java/org/apache/mina/common/ByteBuffer.java directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.= java Modified: directory/network/trunk/src/java/org/apache/mina/common/ByteBuffe= r=2Ejava URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apa= che/mina/common/ByteBuffer.java?view=3Ddiff&r1=3D161855&r2=3D161856 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- 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 01:29:28 2005 @@ -177,7 +177,11 @@ * Returns the underlying NIO buffer instance. */ public abstract java.nio.ByteBuffer buf(); - + =20 + public abstract boolean isDirect(); + =20 + public abstract boolean isReadOnly(); + =20 public abstract int capacity(); =20 public abstract int position(); @@ -202,11 +206,11 @@ =20 public abstract boolean hasRemaining(); =20 - public abstract java.nio.ByteBuffer slice(); + public abstract ByteBuffer slice(); =20 - public abstract java.nio.ByteBuffer duplicate(); + public abstract ByteBuffer duplicate(); =20 - public abstract java.nio.ByteBuffer asReadOnlyBuffer(); + public abstract ByteBuffer asReadOnlyBuffer(); =20 public abstract byte get(); =20 @@ -422,13 +426,11 @@ */ public abstract ByteBuffer fork( int newCapacity ); =20 - private static class DefaultByteBuffer extends ByteBuffer + private static abstract class BaseByteBuffer extends ByteBuffer { private final java.nio.ByteBuffer buf; =20 - private int refCount =3D 1; - =20 - private DefaultByteBuffer( java.nio.ByteBuffer buf ) + protected BaseByteBuffer( java.nio.ByteBuffer buf ) { if( buf =3D=3D null ) { @@ -437,60 +439,19 @@ this.buf =3D buf; } =20 - private DefaultByteBuffer( int capacity, boolean direct ) + public java.nio.ByteBuffer buf() { - if( direct ) - { - buf =3D java.nio.ByteBuffer.allocateDirect( capacity ); - } - else - { - buf =3D java.nio.ByteBuffer.allocate( capacity ); - } + return buf; } =20 - private synchronized void resetRefCount() + public boolean isDirect() { - refCount =3D 1; + return buf.isDirect(); } =20 - public synchronized void acquire() + public boolean isReadOnly() { - if( refCount <=3D 0 ) - { - throw new IllegalStateException( "Already released buffer.= " ); - } - - refCount ++; - } - - public synchronized void release() - { - if( refCount <=3D 0 ) - { - refCount =3D 0; - throw new IllegalStateException( - "Already released buffer. You released the buffer= too many times." ); - } - - refCount --; - if( refCount > 0) - { - return; - } - - Stack[] bufferStacks =3D buf.isDirect()? directBufferStacks : = heapBufferStacks; - Stack stack =3D bufferStacks[ getBufferStackIndex( bufferStack= s, buf.capacity() ) ]; - synchronized( stack ) - { - // push back - stack.push( this ); - } - } - - public java.nio.ByteBuffer buf() - { - return buf; + return buf.isReadOnly(); } =20 public int capacity() @@ -560,19 +521,19 @@ return buf.hasRemaining(); } =20 - public java.nio.ByteBuffer slice() + public ByteBuffer slice() { - return buf.slice(); + return new DuplicateByteBuffer( this, buf.slice()); } =20 - public java.nio.ByteBuffer duplicate() + public ByteBuffer duplicate() { - return buf.duplicate(); + return new DuplicateByteBuffer( this, buf.duplicate() ); } =20 - public java.nio.ByteBuffer asReadOnlyBuffer() + public ByteBuffer asReadOnlyBuffer() { - return buf.asReadOnlyBuffer(); + return new DuplicateByteBuffer( this, buf.asReadOnlyBuffer() )= ; } =20 public byte get() @@ -1144,6 +1105,80 @@ throw new IllegalArgumentException( "fieldSize cannot be negative: " + fieldSize ); } + } + } + + private static class DefaultByteBuffer extends BaseByteBuffer + { + private int refCount =3D 1; + =20 + protected DefaultByteBuffer( java.nio.ByteBuffer buf ) + { + super( buf ); + } + + protected DefaultByteBuffer( int capacity, boolean direct ) + { + super( direct? java.nio.ByteBuffer.allocateDirect( capacity ) = : + java.nio.ByteBuffer.allocate( capacity ) ); + } + =20 + private synchronized void resetRefCount() + { + refCount =3D 1; + } + =20 + public synchronized void acquire() + { + if( refCount <=3D 0 ) + { + throw new IllegalStateException( "Already released buffer.= " ); + } + + refCount ++; + } + + public synchronized void release() + { + if( refCount <=3D 0 ) + { + refCount =3D 0; + throw new IllegalStateException( + "Already released buffer. You released the buffer= too many times." ); + } + + refCount --; + if( refCount > 0) + { + return; + } + + Stack[] bufferStacks =3D isDirect()? directBufferStacks : heap= BufferStacks; + Stack stack =3D bufferStacks[ getBufferStackIndex( bufferStack= s, capacity() ) ]; + synchronized( stack ) + { + // push back + stack.push( this ); + } + } + } + =20 + private static class DuplicateByteBuffer extends BaseByteBuffer + { + private ByteBuffer buf; + + private DuplicateByteBuffer( ByteBuffer buf, java.nio.ByteBuffer d= uplicateBuf ) + { + super( duplicateBuf ); + this.buf =3D buf; + } + + public void acquire() { + buf.acquire(); + } + + public void release() { + buf.release(); } } } Modified: directory/network/trunk/src/test/org/apache/mina/common/ByteBuffe= rTest.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apa= che/mina/common/ByteBufferTest.java?view=3Ddiff&r1=3D161855&r2=3D161856 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.= java (original) +++ directory/network/trunk/src/test/org/apache/mina/common/ByteBufferTest.= java Tue Apr 19 01:29:28 2005 @@ -185,4 +185,16 @@ Assert.assertEquals( buf.get( i ), newBuf.get( i ) ); } } + =20 + public void testDuplication() + { + ByteBuffer buf =3D ByteBuffer.allocate( 16 ); + buf.fillAndReset( buf.remaining() ); + + ByteBuffer buf2 =3D buf.duplicate(); + buf.putInt( 1234 ); + Assert.assertEquals( 4, buf.position() ); + Assert.assertEquals( 0, buf2.position() ); + Assert.assertEquals( 1234, buf2.getInt() ); + } }