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 2006/08/11 07:46:32 UTC

svn commit: r430684 - in /directory/branches/mina/0.8/src: java/org/apache/mina/common/ByteBuffer.java test/org/apache/mina/common/ByteBufferTest.java

Author: trustin
Date: Thu Aug 10 22:46:32 2006
New Revision: 430684

URL: http://svn.apache.org/viewvc?rev=430684&view=rev
Log:
Fixed issue: DIRMINA-243 (mark() and autoexpand)
* Made sure mark is preserved after expansion in branch 0.8

Modified:
    directory/branches/mina/0.8/src/java/org/apache/mina/common/ByteBuffer.java
    directory/branches/mina/0.8/src/test/org/apache/mina/common/ByteBufferTest.java

Modified: directory/branches/mina/0.8/src/java/org/apache/mina/common/ByteBuffer.java
URL: http://svn.apache.org/viewvc/directory/branches/mina/0.8/src/java/org/apache/mina/common/ByteBuffer.java?rev=430684&r1=430683&r2=430684&view=diff
==============================================================================
--- directory/branches/mina/0.8/src/java/org/apache/mina/common/ByteBuffer.java (original)
+++ directory/branches/mina/0.8/src/java/org/apache/mina/common/ByteBuffer.java Thu Aug 10 22:46:32 2006
@@ -559,6 +559,12 @@
         private boolean autoExpand;
         private boolean pooled;
 
+        /**
+         * We don't have any access to Buffer.markValue(), so we need to track it down,
+         * which will cause small extra overhead.
+         */
+        private int mark = -1;
+
         protected DefaultByteBuffer()
         {
         }
@@ -660,6 +666,10 @@
         {
             autoExpand( newPosition, 0 );
             buf.position( newPosition );
+            if( mark > newPosition )
+        	{
+            	mark = -1;
+        	}
             return this;
         }
 
@@ -672,12 +682,17 @@
         {
             autoExpand( newLimit, 0 );
             buf.limit( newLimit );
+            if( mark > newLimit )
+            {
+            	mark = -1;
+            }
             return this;
         }
 
         public ByteBuffer mark()
         {
             buf.mark();
+            mark = buf.position();
             return this;
         }
 
@@ -690,18 +705,21 @@
         public ByteBuffer clear()
         {
             buf.clear();
+            mark = -1;
             return this;
         }
 
         public ByteBuffer flip()
         {
             buf.flip();
+            mark = -1;
             return this;
         }
 
         public ByteBuffer rewind()
         {
             buf.rewind();
+            mark = -1;
             return this;
         }
 
@@ -792,6 +810,7 @@
         public ByteBuffer compact()
         {
             buf.compact();
+            mark = -1;
             return this;
         }
 
@@ -1530,7 +1549,14 @@
             int limit = oldBuf.limit();
             oldBuf.clear();
             newBuf.put( oldBuf );
-            newBuf.position( 0 );
+            
+            // Transfer marked position to the new buffer.
+            if( mark >= 0 )
+            {
+            	newBuf.position( mark );
+            	newBuf.mark();
+            }
+            
             newBuf.limit( limit );
             newBuf.position( pos );
             this.buf = newBuf;

Modified: directory/branches/mina/0.8/src/test/org/apache/mina/common/ByteBufferTest.java
URL: http://svn.apache.org/viewvc/directory/branches/mina/0.8/src/test/org/apache/mina/common/ByteBufferTest.java?rev=430684&r1=430683&r2=430684&view=diff
==============================================================================
--- directory/branches/mina/0.8/src/test/org/apache/mina/common/ByteBufferTest.java (original)
+++ directory/branches/mina/0.8/src/test/org/apache/mina/common/ByteBufferTest.java Thu Aug 10 22:46:32 2006
@@ -147,6 +147,26 @@
         Assert.assertEquals( 4, buf.capacity() );
     }
     
+    public void testAutoExpandMark() throws Exception
+    {
+    	ByteBuffer buf = ByteBuffer.allocate( 4 ).setAutoExpand( true );
+
+    	buf.put( ( byte ) 0 );
+    	buf.put( ( byte ) 0 );
+    	buf.put( ( byte ) 0 );
+
+    	// Position should be 3 when we reset this buffer.
+    	buf.mark();
+
+    	// Overflow it
+    	buf.put( ( byte ) 0 );
+    	buf.put( ( byte ) 0 );
+    	
+    	Assert.assertEquals( 5, buf.position() );
+    	buf.reset();
+    	Assert.assertEquals( 3, buf.position() );
+    }
+    
     public void testPooledProperty() throws Exception
     {
         ByteBuffer buf = ByteBuffer.allocate( 16 );