You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by rb...@apache.org on 2013/07/02 15:22:46 UTC

[4/4] git commit: added incremental moves, refactoring

added incremental moves, refactoring


Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/b9f507c1
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/b9f507c1
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/b9f507c1

Branch: refs/heads/trunk
Commit: b9f507c1b75ead52500c6f4693bdb0fad9ee0cde
Parents: 65da170
Author: Raphaël P. Barazzutti <rb...@apache.org>
Authored: Tue Jul 2 10:08:18 2013 +0200
Committer: Raphaël P. Barazzutti <ra...@gmail.com>
Committed: Tue Jul 2 14:57:25 2013 +0200

----------------------------------------------------------------------
 .../java/org/apache/mina/codec/IoBuffer.java    | 80 ++++++++++----------
 1 file changed, 42 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/b9f507c1/codec/src/main/java/org/apache/mina/codec/IoBuffer.java
----------------------------------------------------------------------
diff --git a/codec/src/main/java/org/apache/mina/codec/IoBuffer.java b/codec/src/main/java/org/apache/mina/codec/IoBuffer.java
index de545c2..605ca24 100644
--- a/codec/src/main/java/org/apache/mina/codec/IoBuffer.java
+++ b/codec/src/main/java/org/apache/mina/codec/IoBuffer.java
@@ -105,13 +105,13 @@ public final class IoBuffer {
     private BufferNode head, tail;
 
     /** The maximal position in the IoBuffer */
-    private Pointer limit;
+    private Pointer limit = new Pointer();
 
     /** The current position in the buffer */
-    private Pointer mark;
+    private Pointer mark = new Pointer();
 
     /** The marked position, for the next reset() */
-    private Pointer position;
+    private Pointer position = new Pointer();
 
     /** If the buffer is readonly */
     private boolean readonly = false;
@@ -363,7 +363,7 @@ public final class IoBuffer {
             currentOffset += blocksize;
             remainsToCopy -= blocksize;
 
-            position.setPosition(position.getPosition() + blocksize);
+            position.incrementPosition(blocksize);
         }
         position.getNode().getBuffer().position(0);
         return this;
@@ -372,11 +372,11 @@ public final class IoBuffer {
     /**
      * @see ByteBuffer#get(int)
      */
-    public byte get(int pos) {
-        if (pos >= limit.getPosition()) {
+    public byte get(int index) {
+        if (index >= limit.getPosition()) {
             throw new IndexOutOfBoundsException();
         }
-        return get(getPointerByPosition(pos));
+        return get(getPointerByPosition(index));
     }
 
     private byte get(Pointer pos) {
@@ -560,8 +560,8 @@ public final class IoBuffer {
     /**
      * @see ByteBuffer#limit(int)
      */
-    public void limit(int limit) {
-        this.limit = getPointerByPosition(limit);
+    public void limit(int newLimit) {
+        this.limit = getPointerByPosition(newLimit);
     }
 
     /**
@@ -571,10 +571,6 @@ public final class IoBuffer {
         this.limit = position.duplicate();
     }
 
-    public Pointer newPointer(BufferNode node, int position) {
-        return new Pointer(position);
-    }
-
     /**
      * Returns the byte order used by this Iouffer when converting bytes from/to other primitive
      * types.
@@ -613,16 +609,16 @@ public final class IoBuffer {
     /**
      * @see ByteBuffer#position(int)
      */
-    public void position(int position) {
-        if (position > limit() || position < 0) {
+    public void position(int newPosition) {
+        if (newPosition > limit() || newPosition < 0) {
             throw new IllegalArgumentException();
         }
 
-        if (mark != null && mark.getPosition() > position) {
+        if (mark != null && mark.getPosition() > newPosition) {
             mark = null;
         }
 
-        setPosition(getPointerByPosition(position));
+        this.position.setPosition(newPosition);
     }
 
     /**
@@ -643,15 +639,15 @@ public final class IoBuffer {
     /**
      * @see ByteBuffer#put(byte[])
      */
-    public IoBuffer put(byte[] dst) {
-        put(dst, 0, dst.length);
+    public IoBuffer put(byte[] src) {
+        put(src, 0, src.length);
         return this;
     }
 
     /**
      * @see ByteBuffer#put(byte[], int, int)
      */
-    public IoBuffer put(byte[] dst, int offset, int length) {
+    public IoBuffer put(byte[] src, int offset, int length) {
         if (readonly) {
             throw new ReadOnlyBufferException();
         }
@@ -667,12 +663,12 @@ public final class IoBuffer {
 
             ByteBuffer currentBuffer = position.getNode().getBuffer();
             int blocksize = Math.min(remainsToCopy, currentBuffer.remaining());
-            position.getNode().getBuffer().put(dst, currentOffset, blocksize);
+            position.getNode().getBuffer().put(src, currentOffset, blocksize);
 
             currentOffset += blocksize;
             remainsToCopy -= blocksize;
 
-            position.setPosition(position.getPosition() + blocksize);
+            position.incrementPosition(blocksize);
         }
         position.getNode().getBuffer().position(0);
         return this;
@@ -681,11 +677,11 @@ public final class IoBuffer {
     /**
      * @see ByteBuffer#put(int, byte)
      */
-    public IoBuffer put(int pos, byte value) {
-        if (pos >= limit.getPosition()) {
+    public IoBuffer put(int index, byte value) {
+        if (index >= limit.getPosition()) {
             throw new IndexOutOfBoundsException();
         }
-        Pointer p = getPointerByPosition(pos);
+        Pointer p = getPointerByPosition(index);
         put(p, value);
         return this;
     }
@@ -854,10 +850,6 @@ public final class IoBuffer {
         return this;
     }
 
-    private void setPosition(Pointer position) {
-        this.position = position;
-    }
-
     /**
      * @see ByteBuffer#slice()
      */
@@ -865,6 +857,7 @@ public final class IoBuffer {
         position.updatePos();
         IoBuffer out = new IoBuffer();
         out.order(order());
+
         position.getNode().getBuffer().position(position.getPositionInNode());
         if (hasRemaining()) {
             tail.getBuffer().limit(limit.getPositionInNode());
@@ -881,6 +874,7 @@ public final class IoBuffer {
             tail.getBuffer().limit(tail.getBuffer().capacity());
         }
         position.getNode().getBuffer().position(0);
+
         return out;
     }
 
@@ -939,12 +933,12 @@ public final class IoBuffer {
         private int positionInBuffer;
 
         public Pointer(int position) {
-            super();
-
-            node = getBufferNodeByPosition(position);
+            this();
 
-            positionInBuffer = node == null ? 0 : position - node.offset;
+            setPosition(position);
+        }
 
+        public Pointer() {
         }
 
         public Pointer duplicate() {
@@ -979,13 +973,23 @@ public final class IoBuffer {
         }
 
         public void incrPosition() {
-            positionInBuffer++;
+            incrementPosition(1);
         }
 
-        public void setPosition(int position) {
-            node = getBufferNodeByPosition(position);
+        public void setPosition(int newPosition) {
+            if (node == null || node.offset < newPosition) {
+
+                node = getBufferNodeByPosition(newPosition);
+
+            } else {
+                node = head;
+            }
+            positionInBuffer = node == null ? 0 : newPosition - node.offset;
+            updatePos();
+        }
 
-            positionInBuffer = node == null ? 0 : position - node.offset;
+        public void incrementPosition(int positionIncrement) {
+            positionInBuffer += positionIncrement;
         }
 
         @Override
@@ -1001,7 +1005,7 @@ public final class IoBuffer {
         }
 
         public void updatePos() {
-            while (positionInBuffer >= node.getBuffer().capacity() && node.hasNext()) {
+            while (node != null && positionInBuffer >= node.getBuffer().capacity() && node.hasNext()) {
                 positionInBuffer -= node.getBuffer().capacity();
                 node = node.getNext();
             }