You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/12/11 16:01:07 UTC

svn commit: r1773584 [1/4] - in /qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0: ./ codec/ framing/ messaging/ type/ type/codec/ type/messaging/codec/ type/security/codec/ type/transaction/codec/ typ...

Author: rgodfrey
Date: Sun Dec 11 16:01:06 2016
New Revision: 1773584

URL: http://svn.apache.org/viewvc?rev=1773584&view=rev
Log:
QPID-7586 : Improve AMQP 1.0 codec

Removed:
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ArrayWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/WrapperTypeValueWriter.java
Modified:
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractDescribedTypeWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractListWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractMapWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteArrayWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CompoundWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DelegatingValueWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedEightWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedFourWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedOneWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedSixteenWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedTwoWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FrameWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntegerWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/LongWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/MapWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/NullWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/RestrictedTypeValueWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ShortWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SimpleVariableWidthWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/StringWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolArrayWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/TimestampWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UUIDWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UnsignedByteWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UnsignedIntegerWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UnsignedLongWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UnsignedShortWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ValueWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/VariableWidthWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionEncoderImpl.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/Binary.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/codec/AMQPDescribedTypeRegistry.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AcceptedWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpSequenceWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/ApplicationPropertiesWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DataWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DeleteOnCloseWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DeleteOnNoLinksOrMessagesWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DeleteOnNoLinksWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DeleteOnNoMessagesWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DeliveryAnnotationsWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/ExactSubjectFilterWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/FooterWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/HeaderWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/JMSSelectorFilterWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/MatchingSubjectFilterWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/MessageAnnotationsWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/ModifiedWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/NoLocalFilterWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/PropertiesWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/ReceivedWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/RejectedWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/ReleasedWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/SourceWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/TargetWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/security/codec/SaslChallengeWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/security/codec/SaslInitWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/security/codec/SaslMechanismsWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/security/codec/SaslOutcomeWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/security/codec/SaslResponseWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transaction/codec/CoordinatorWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transaction/codec/DeclareWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transaction/codec/DeclaredWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transaction/codec/DischargeWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transaction/codec/TransactionalStateWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/AttachWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/BeginWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/CloseWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/DetachWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/DispositionWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/EndWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/ErrorWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/FlowWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/OpenWriter.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/transport/codec/TransferWriter.java

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java Sun Dec 11 16:01:06 2016
@@ -1041,7 +1041,7 @@ public class AMQPConnection_1_0 extends
             }
             else
             {
-                int size = writer.writeToBuffer(EMPTY_BYTE_BUFFER);
+                int size = writer.getEncodedSize();
                 int maxPayloadSize = _maxFrameSize - (size + 9);
                 long payloadLength = QpidByteBufferUtils.remaining(payload);
                 if(payloadLength <= maxPayloadSize)
@@ -1054,7 +1054,7 @@ public class AMQPConnection_1_0 extends
                     ((Transfer) body).setMore(Boolean.TRUE);
 
                     writer = _describedTypeRegistry.getValueWriter(body);
-                    size = writer.writeToBuffer(EMPTY_BYTE_BUFFER);
+                    size = writer.getEncodedSize();
                     maxPayloadSize = _maxFrameSize - (size + 9);
 
                     List<QpidByteBuffer> payloadDup = new ArrayList<>(payload.size());

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java Sun Dec 11 16:01:06 2016
@@ -50,7 +50,6 @@ import org.apache.qpid.server.protocol.v
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedShort;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpSequenceSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpValueSection;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.Data;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.DataSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.EncodingRetainingSection;
 import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
@@ -116,7 +115,7 @@ public class MessageConverter_from_1_0
                     int totalSize = 0;
                     for(EncodingRetainingSection<?> section : sections)
                     {
-                        totalSize += ((DataSection)section).getValue().getLength();
+                        totalSize += ((DataSection)section).getValue().getArray().length;
                     }
                     byte[] bodyData = new byte[totalSize];
                     ByteBuffer buf = ByteBuffer.wrap(bodyData);
@@ -208,10 +207,7 @@ public class MessageConverter_from_1_0
             }
             else if(value instanceof Binary)
             {
-                Binary binary = (Binary)value;
-                byte[] data = new byte[binary.getLength()];
-                binary.asByteBuffer().get(data);
-                return data;
+                return ((Binary)value).getArray();
             }
             else
             {

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java Sun Dec 11 16:01:06 2016
@@ -1224,15 +1224,15 @@ public class Session_1_0 implements AMQS
             return null;
         }
 
-        if(txnId.getLength() > 4)
+        byte[] data = txnId.getArray();
+        if(data.length > 4)
             throw new IllegalArgumentException();
 
         int id = 0;
-        byte[] data = txnId.getArray();
-        for(int i = 0; i < txnId.getLength(); i++)
+        for(int i = 0; i < data.length; i++)
         {
             id <<= 8;
-            id |= ((int)data[i+txnId.getArrayOffset()] & 0xff);
+            id |= ((int)data[i] & 0xff);
         }
 
         return id;

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractDescribedTypeWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractDescribedTypeWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractDescribedTypeWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractDescribedTypeWriter.java Sun Dec 11 16:01:06 2016
@@ -25,164 +25,29 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class AbstractDescribedTypeWriter<V> implements ValueWriter<V>
 {
-    private int _length;
-    private Registry _registry;
-    private static final int LARGE_COMPOUND_THRESHOLD_COUNT = 10;
-    private ValueWriter _delegate;
     private static final byte DESCRIBED_TYPE = (byte)0;
+    private final ValueWriter _descriptorWriter;
+    private final ValueWriter _describedWriter;
 
-    public AbstractDescribedTypeWriter(final Registry registry)
+    public AbstractDescribedTypeWriter(ValueWriter descriptorWriter,
+                                       ValueWriter describedWriter)
     {
-        _registry = registry;
+        _descriptorWriter = descriptorWriter;
+        _describedWriter = describedWriter;
     }
 
-    enum State {
-        FORMAT_CODE,
-        DESCRIPTOR,
-        DESCRIBED,
-        DONE
-    }
-
-    private State _state = State.FORMAT_CODE;
-
-    public int writeToBuffer(QpidByteBuffer buffer)
-    {
-        final int length = _length;
-
-        if(length == -1)
-        {
-            writeFirstPass(buffer);
-        }
-        else
-        {
-
-            State state = _state;
-
-            switch(state)
-            {
-                case FORMAT_CODE:
-                    if(buffer.hasRemaining())
-                    {
-                        buffer.put(DESCRIBED_TYPE);
-                        state = State.DESCRIPTOR;
-                        _delegate = createDescriptorWriter();
-                    }
-                    else
-                    {
-                        break;
-                    }
-
-                case DESCRIPTOR:
-                    if(buffer.hasRemaining())
-                    {
-                        _delegate.writeToBuffer(buffer);
-                        if(_delegate.isComplete())
-                        {
-                            state = State.DESCRIBED;
-                            _delegate = createDescribedWriter();
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-                case DESCRIBED:
-                    if(buffer.hasRemaining())
-                    {
-                        _delegate.writeToBuffer(buffer);
-                        if(_delegate.isComplete())
-                        {
-                            state = State.DONE;
-                            _delegate = null;
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-
-            }
-
-            _state = state;
-
-        }
 
-        return _length;
-    }
-
-    private void writeFirstPass(QpidByteBuffer buffer)
+    public void writeToBuffer(QpidByteBuffer buffer)
     {
+        buffer.put(DESCRIBED_TYPE);
+        _descriptorWriter.writeToBuffer(buffer);
+        _describedWriter.writeToBuffer(buffer);
 
-        int length = 1;
-        State state = State.FORMAT_CODE;
-
-        ValueWriter descriptorWriter = createDescriptorWriter();
-        if(buffer.hasRemaining())
-        {
-            buffer.put(DESCRIBED_TYPE);
-            state = State.DESCRIPTOR;
-            _delegate = descriptorWriter;
-        }
-        length += descriptorWriter.writeToBuffer(buffer);
-
-        ValueWriter describedWriter = createDescribedWriter();
-
-        if(descriptorWriter.isComplete())
-        {
-            state = State.DESCRIBED;
-            _delegate = describedWriter;
-        }
-
-        length += describedWriter.writeToBuffer(buffer);
-
-        if(describedWriter.isComplete())
-        {
-            _delegate = null;
-            state = State.DONE;
-        }
-
-        _state = state;
-        _length = length;
-    }
-
-    public void setValue(V value)
-    {
-        _length = -1;
-        _delegate = null;
-        _state = State.FORMAT_CODE;
-        onSetValue(value);
-    }
-
-    public void setRegistry(Registry registry)
-    {
-        _registry = registry;
-    }
-
-    protected Registry getRegistry()
-    {
-        return _registry;
-    }
-
-    protected abstract void onSetValue(final V value);
-
-    protected abstract void clear();
-
-    protected abstract ValueWriter createDescribedWriter();
-
-    protected abstract Object getDescriptor();
-
-    protected final ValueWriter createDescriptorWriter()
-    {
-        return getRegistry().getValueWriter(getDescriptor());
-    }
-
-    public boolean isComplete()
-    {
-        return _state == State.DONE;
     }
 
-    public boolean isCacheable()
+    @Override
+    public int getEncodedSize()
     {
-        return false;
+        return 1 + _descriptorWriter.getEncodedSize() + _describedWriter.getEncodedSize();
     }
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractListWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractListWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractListWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractListWriter.java Sun Dec 11 16:01:06 2016
@@ -27,6 +27,11 @@ public abstract class AbstractListWriter
         super(registry);
     }
 
+    public AbstractListWriter(final Registry registry, final V object)
+    {
+        super(registry, object);
+    }
+
     @Override
     protected byte getFourOctetEncodingCode()
     {

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractMapWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractMapWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractMapWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractMapWriter.java Sun Dec 11 16:01:06 2016
@@ -23,11 +23,11 @@ package org.apache.qpid.server.protocol.
 
 public abstract class AbstractMapWriter<V> extends CompoundWriter<V>
 {
-    private boolean onKey;
+    private boolean _onKey;
 
-    public AbstractMapWriter(Registry registry)
+    AbstractMapWriter(final Registry registry, final V object)
     {
-        super(registry);
+        super(registry, object);
     }
 
     @Override
@@ -53,7 +53,7 @@ public abstract class AbstractMapWriter<
     @Override
     protected final boolean hasNext()
     {
-        return onKey || hasMapNext();
+        return _onKey || hasMapNext();
     }
 
     protected abstract boolean hasMapNext();
@@ -61,7 +61,7 @@ public abstract class AbstractMapWriter<
     @Override
     protected final Object next()
     {
-        if(onKey = !onKey)
+        if(_onKey = !_onKey)
         {
             return nextKey();
         }
@@ -76,18 +76,9 @@ public abstract class AbstractMapWriter<
     protected abstract Object nextKey();
 
     @Override
-    protected final void clear()
-    {
-        onKey = false;
-        onClear();
-    }
-
-    protected abstract void onClear();
-
-    @Override
     protected final void reset()
     {
-        onKey = false;
+        _onKey = false;
         onReset();
     }
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryWriter.java Sun Dec 11 16:01:06 2016
@@ -25,8 +25,11 @@ import org.apache.qpid.server.protocol.v
 
 public class BinaryWriter extends SimpleVariableWidthWriter<Binary>
 {
-    private int _offset;
-    private int _length;
+
+    public BinaryWriter(final Binary object)
+    {
+        super(object.getArray());
+    }
 
     @Override
     protected byte getFourOctetEncodingCode()
@@ -40,31 +43,15 @@ public class BinaryWriter extends Simple
         return (byte)0xa0;
     }
 
-    @Override
-    protected byte[] getByteArray(Binary value)
-    {
-        _offset = value.getArrayOffset();
-        _length = value.getLength();
-        return value.getArray();
-    }
-
-    @Override
-    protected int getOffset()
-    {
-        return _offset;
-    }
-
-    @Override protected int getLength()
-    {
-        return _length;
-    }
 
     private static Factory<Binary> FACTORY = new Factory<Binary>()
                                             {
 
-                                                public ValueWriter<Binary> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<Binary> newInstance(final Registry registry,
+                                                                                       final Binary object)
                                                 {
-                                                    return new BinaryWriter();
+                                                    return new BinaryWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanWriter.java Sun Dec 11 16:01:06 2016
@@ -25,41 +25,41 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public class BooleanWriter implements ValueWriter<Boolean>
 {
-    private boolean _complete = true;
     private boolean _value;
 
-    public int writeToBuffer(QpidByteBuffer buffer)
+    public BooleanWriter()
     {
-        if(!_complete && buffer.hasRemaining())
-        {
-            buffer.put(_value ? (byte)0x41 : (byte)0x42);
-            _complete = true;
-        }
-        return 1;
     }
 
-    public void setValue(Boolean value)
+    public BooleanWriter(final Boolean object)
     {
-        _complete = false;
-        _value = value.booleanValue();
+        setValue(object);
     }
 
-    public boolean isCacheable()
+    @Override
+    public int getEncodedSize()
     {
-        return true;
+        return 1;
     }
 
-    public boolean isComplete()
+    public void writeToBuffer(QpidByteBuffer buffer)
     {
-        return _complete;
+        buffer.put(_value ? (byte)0x41 : (byte)0x42);
+    }
+
+    public void setValue(Boolean value)
+    {
+        _value = value.booleanValue();
     }
 
     private static Factory<Boolean> FACTORY = new Factory<Boolean>()
                                             {
 
-                                                public ValueWriter<Boolean> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<Boolean> newInstance(final Registry registry,
+                                                                                        final Boolean object)
                                                 {
-                                                    return new BooleanWriter();
+                                                    return new BooleanWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteArrayWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteArrayWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteArrayWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteArrayWriter.java Sun Dec 11 16:01:06 2016
@@ -24,6 +24,11 @@ package org.apache.qpid.server.protocol.
 public class ByteArrayWriter extends SimpleVariableWidthWriter<byte[]>
 {
 
+    public ByteArrayWriter(final byte[] object)
+    {
+        super(object);
+    }
+
     @Override
     protected byte getFourOctetEncodingCode()
     {
@@ -36,25 +41,14 @@ public class ByteArrayWriter extends Sim
         return (byte)0xa0;
     }
 
-    @Override
-    protected byte[] getByteArray(byte[] value)
-    {
-        return value;
-    }
-
-
-    @Override
-    protected int getOffset()
-    {
-        return 0;
-    }
-
     private static Factory<byte[]> FACTORY = new Factory<byte[]>()
                                             {
 
-                                                public ValueWriter<byte[]> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<byte[]> newInstance(final Registry registry,
+                                                                                       final byte[] object)
                                                 {
-                                                    return new ByteArrayWriter();
+                                                    return new ByteArrayWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteWriter.java Sun Dec 11 16:01:06 2016
@@ -25,61 +25,43 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public class ByteWriter implements ValueWriter<Byte>
 {
-    private int _written = 2;
     private byte _value;
 
-    public int writeToBuffer(QpidByteBuffer buffer)
+    public ByteWriter()
     {
+    }
 
-        switch(_written)
-        {
-            case 0:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put((byte)0x51);
-                }
-                else
-                {
-                    break;
-                }
-            case 1:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put(_value);
-                    _written = 2;
-                }
-                else
-                {
-                    _written = 1;
-                }
-
-        }
-
-        return 2;
+    public ByteWriter(final Byte object)
+    {
+        setValue(object);
     }
 
-    public void setValue(Byte value)
+    @Override
+    public int getEncodedSize()
     {
-        _written = 0;
-        _value = value.byteValue();
+        return 2;
     }
 
-    public boolean isComplete()
+    public void writeToBuffer(QpidByteBuffer buffer)
     {
-        return _written == 2;
+
+        buffer.put((byte)0x51);
+        buffer.put(_value);
     }
 
-    public boolean isCacheable()
+    public void setValue(Byte value)
     {
-        return true;
+        _value = value.byteValue();
     }
 
     private static Factory<Byte> FACTORY = new Factory<Byte>()
                                             {
 
-                                                public ValueWriter<Byte> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<Byte> newInstance(final Registry registry,
+                                                                                     final Byte object)
                                                 {
-                                                    return new ByteWriter();
+                                                    return new ByteWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharWriter.java Sun Dec 11 16:01:06 2016
@@ -25,24 +25,25 @@ public class CharWriter extends FixedFou
 {
     private static final byte FORMAT_CODE = (byte)0x73;
 
-    @Override
-    byte getFormatCode()
+    public CharWriter(final Character object)
     {
-        return FORMAT_CODE;
+        super((int)object.charValue());
     }
 
     @Override
-    int convertValueToInt(Character value)
+    byte getFormatCode()
     {
-        return (int) value.charValue();
+        return FORMAT_CODE;
     }
 
     private static Factory<Character> FACTORY = new Factory<Character>()
                                             {
 
-                                                public ValueWriter<Character> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<Character> newInstance(final Registry registry,
+                                                                                          final Character object)
                                                 {
-                                                    return new CharWriter();
+                                                    return new CharWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CompoundWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CompoundWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CompoundWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CompoundWriter.java Sun Dec 11 16:01:06 2016
@@ -25,391 +25,101 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class CompoundWriter<V> implements ValueWriter<V>
 {
-    private int _length;
+    private int _length = -1;
     private Registry _registry;
-    private static final int LARGE_COMPOUND_THRESHOLD_COUNT = 25;
-    private ValueWriter _delegate;
 
     public CompoundWriter(final Registry registry)
     {
         _registry = registry;
     }
 
-    enum State {
-        FORMAT_CODE,
-        SIZE_0,
-        SIZE_1,
-        SIZE_2,
-        SIZE_3,
-        COUNT_0,
-        COUNT_1,
-        COUNT_2,
-        COUNT_3,
-        DELEGATING,
-        DONE
-    }
-
-    private State _state = State.FORMAT_CODE;
-
-    public int writeToBuffer(QpidByteBuffer buffer)
+    public CompoundWriter(final Registry registry, V object)
     {
-        return writeToBuffer(buffer, false);
+        _registry = registry;
     }
 
-    public int writeToBuffer(QpidByteBuffer buffer, boolean large)
-    {
-        final int length = _length;
 
-        if(length == -1)
+    @Override
+    public int getEncodedSize()
+    {
+        int encodedSize = 1; // byte for the count
+        if(_length == -1)
         {
-            writeFirstPass(buffer, (large || getCount() > LARGE_COMPOUND_THRESHOLD_COUNT) ? 4 : 1);
-            if(_delegate != null && _delegate.isComplete())
+            while (hasNext())
+            {
+                encodedSize += _registry.getValueWriter(next()).getEncodedSize();
+            }
+            if(encodedSize > 255)
             {
-                _delegate = null;
+                encodedSize += 3;  // we'll need four bytes for the count, to match the length
             }
+            _length = encodedSize;
         }
         else
         {
-            //
-
-            final int size = (length & 0xFFFFFF00) == 0 ? 1 : 4;
-            final int count = getCount();
-            final int typeLength = length - (1+size);
-
-            State state = _state;
-
-            switch(state)
-            {
-                case FORMAT_CODE:
-                    if(buffer.hasRemaining())
-                    {
-                        buffer.put(size == 1 ? getSingleOctetEncodingCode(): getFourOctetEncodingCode());
-                        state = State.SIZE_0;
-                    }
-                    else
-                    {
-                        break;
-                    }
-
-                case SIZE_0:
-                    if(size == 4)
-                    {
-                        if(buffer.remaining()>=4)
-                        {
-                            buffer.putInt(typeLength);
-                            state = State.COUNT_0;
-                        }
-                    }
-                    else if(size == 1)
-                    {
-                        if(buffer.hasRemaining())
-                        {
-                            buffer.put((byte)(typeLength));
-                            state = State.COUNT_0;
-                        }
-                        else
-                        {
-                            break;
-                        }
-
-                    }
-                case SIZE_1:
-                case SIZE_2:
-                    if(state != State.COUNT_0 && buffer.remaining() >= 2)
-                    {
-                        buffer.putShort((short)(((typeLength) >> ((3-state.ordinal())<<3)) & 0xFFFF ));
-                        state = (state == State.SIZE_0)
-                                 ? State.SIZE_2
-                                 : (state == State.SIZE_1)
-                                    ? State.SIZE_3
-                                    : State.COUNT_0;
-                    }
-                case SIZE_3:
-                    if(state != State.COUNT_0 && buffer.hasRemaining())
-                    {
-                        buffer.put((byte)(((typeLength) >> ((4-state.ordinal())<<3)) & 0xFF ));
-                        state = (state == State.SIZE_0)
-                                 ? State.SIZE_1
-                                 : (state == State.SIZE_1)
-                                    ? State.SIZE_2
-                                    : (state == State.SIZE_2)
-                                      ? State.SIZE_3
-                                      : State.COUNT_0;
-                    }
-                case COUNT_0:
-                    if(size == 4)
-                    {
-                        if(buffer.remaining()>=4)
-                        {
-                            buffer.putInt(count);
-                            state = State.DELEGATING;
-                        }
-                    }
-                    else if(size == 1)
-                    {
-                        if(buffer.hasRemaining())
-                        {
-                            buffer.put((byte)count);
-                            state = State.DELEGATING;
-                        }
-                        else
-                        {
-                            break;
-                        }
-
-                    }
-
-                case COUNT_1:
-                case COUNT_2:
-                    if(state != State.DELEGATING && buffer.remaining() >= 2)
-                    {
-                        buffer.putShort((short)((count >> ((7-state.ordinal())<<3)) & 0xFFFF ));
-                        state = state == State.COUNT_0
-                                 ? State.COUNT_2
-                                 : state == State.COUNT_1
-                                    ? State.COUNT_3
-                                    : State.DELEGATING;
-                    }
-                case COUNT_3:
-                    if(state != State.DELEGATING && buffer.hasRemaining())
-                    {
-                        buffer.put((byte)((count >> ((8-state.ordinal())<<3)) & 0xFF ));
-                        state = state == State.COUNT_0
-                                 ? State.COUNT_1
-                                 : state == State.COUNT_1
-                                    ? State.COUNT_2
-                                    : state == State.COUNT_2
-                                       ? State.COUNT_3
-                                       : State.DELEGATING;
-                    }
-                case DELEGATING:
-                    while(state == State.DELEGATING && buffer.hasRemaining())
-                    {
-                        if(_delegate == null || _delegate.isComplete())
-                        {
-                            if(hasNext())
-                            {
-                                Object val = next();
-                                _delegate = _registry.getValueWriter(val);
-                            }
-                            else
-                            {
-                                state = State.DONE;
-                                break;
-                            }
-                        }
-                        _delegate.writeToBuffer(buffer);
-                    }
-            }
-
-            _state = state;
-
+            encodedSize = _length;
         }
-
-        return _length;
-    }
-
-    private void writeFirstPass(QpidByteBuffer buffer, int size)
-    {
-
-        State state = State.FORMAT_CODE;
-        int origPosition = buffer.position();
-        int length ;
-
-
-        if(size == 4)
+        if(encodedSize>255)
         {
-            if(buffer.hasRemaining())
-            {
-                buffer.put(getFourOctetEncodingCode());
-
-                // Skip the size - we will come back and patch this
-                if(buffer.remaining() >= 4 )
-                {
-                    buffer.position(buffer.position()+4);
-                    state = State.COUNT_0;
-                }
-                else
-                {
-                    state = State.values()[buffer.remaining()+1];
-                    buffer.position(buffer.limit());
-                }
-
-
-                switch(buffer.remaining())
-                {
-                    case 0:
-                        break;
-                    case 1:
-                        buffer.put((byte)((getCount() >> 24) & 0xFF));
-                        state = State.COUNT_1;
-                        break;
-                    case 2:
-                        buffer.putShort((short)((getCount() >> 16) & 0xFFFF));
-                        state = State.COUNT_2;
-                        break;
-                    case 3:
-                        buffer.putShort((short)((getCount() >> 16) & 0xFFFF));
-                        buffer.put((byte)((getCount() >> 8) & 0xFF));
-                        state = State.COUNT_3;
-                        break;
-                    default:
-                        buffer.putInt(getCount());
-                        state = State.DELEGATING;
-                }
-
-
-
-            }
-            length = 9;
-
-
-
+            encodedSize+=5; // 1 byte constructor, 4 bytes length
         }
         else
         {
-            if(buffer.hasRemaining())
-            {
-                buffer.put(getSingleOctetEncodingCode());
-                if(buffer.hasRemaining())
-                {
-                    // Size - we will come back and patch this
-                    buffer.put((byte) 0);
-
-                    if(buffer.hasRemaining())
-                    {
-                        buffer.put((byte)getCount());
-                        state = State.DELEGATING;
-                    }
-                    else
-                    {
-                        state = State.COUNT_0;
-                    }
-                }
-                else
-                {
-                    state = State.SIZE_0;
-                }
-            }
-            length = 3;
-
+            encodedSize+=2; // 1 byte constructor, 1 byte length
         }
+        return encodedSize;
+    }
 
-
-        int iterPos = -1;
-        for(int i = 0; i < getCount(); i++)
+    @Override
+    public void writeToBuffer(QpidByteBuffer buffer)
+    {
+        if(_length == -1)
         {
-            Object val = next();
-            ValueWriter writer = _registry.getValueWriter(val);
-            if(writer == null)
-            {
-                // TODO
-                System.out.println("no writer for " + val);
-            }
-            length += writer.writeToBuffer(buffer);
-            if(iterPos == -1 && !writer.isComplete())
-            {
-                iterPos = i;
-                _delegate = writer;
-            }
-
-            if(size == 1 && length > 255)
-            {
-                reset();
-                buffer.position(origPosition);
-                writeFirstPass(buffer, 4);
-                return;
-            }
-
+            getEncodedSize();
         }
+        writeToBuffer(buffer, _length>255);
+    }
 
-        // TODO - back-patch size
-        if(buffer.limit() - origPosition >= 2)
-        {
-            buffer.position(origPosition+1);
-            if(size == 1)
-            {
-                buffer.put((byte)((length & 0xFF)-2));
-            }
-            else
-            {
-                switch(buffer.remaining())
-                {
-                    case 1:
-                        buffer.put((byte)(((length-5) >> 24) & 0xFF));
-                        break;
-                    case 2:
-                        buffer.putShort((short)(((length-5) >> 16) & 0xFFFF));
-                        break;
-                    case 3:
-                        buffer.putShort((short)(((length-5) >> 16) & 0xFFFF));
-                        buffer.put((byte)(((length-5) >> 8) & 0xFF));
-                        break;
-                    default:
-                        buffer.putInt(length-5);
-                }
-            }
-        }
+    private void writeToBuffer(QpidByteBuffer buffer, boolean large)
+    {
+        reset();
+        final int count = getCount();
 
-        if(buffer.limit() - origPosition >= length)
+        buffer.put(large ? getFourOctetEncodingCode() : getSingleOctetEncodingCode());
+        if(large)
         {
-            buffer.position(origPosition+length);
-            state = State.DONE;
+            buffer.putInt(_length);
+            buffer.putInt(count);
         }
         else
         {
-            reset();
-            while(iterPos-- >= 0)
-            {
-                next();
-            }
-            buffer.position(buffer.limit());
+            buffer.put((byte) (_length));
+            buffer.put((byte) count);
+        }
+
+        while(hasNext())
+        {
+            Object val = next();
+             _registry.getValueWriter(val).writeToBuffer(buffer);
         }
-        _state = state;
-        _length = length;
+
     }
 
+
     protected abstract byte getFourOctetEncodingCode();
 
     protected abstract byte getSingleOctetEncodingCode();
 
-    public void setValue(V value)
-    {
-        _length = -1;
-        _delegate = null;
-        _state = State.FORMAT_CODE;
-        onSetValue(value);
-    }
-
-    public void setRegistry(Registry registry)
-    {
-        _registry = registry;
-    }
-
     public Registry getRegistry()
     {
         return _registry;
     }
 
-    protected abstract void onSetValue(final V value);
-
     protected abstract int getCount();
 
     protected abstract boolean hasNext();
 
     protected abstract Object next();
 
-    protected abstract void clear();
-
     protected abstract void reset();
-
-    public boolean isCacheable()
-    {
-        return false;
-    }
-
-    public boolean isComplete()
-    {
-        return _state == State.DONE;
-    }
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DelegatingValueWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DelegatingValueWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DelegatingValueWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DelegatingValueWriter.java Sun Dec 11 16:01:06 2016
@@ -33,20 +33,27 @@ public abstract class DelegatingValueWri
         _registry = registry;
     }
 
-    public int writeToBuffer(final QpidByteBuffer buffer)
+    protected DelegatingValueWriter(final Registry registry, V object)
     {
-        return _delegate.writeToBuffer(buffer);
+        _registry = registry;
+        setValue(object);
     }
 
-    public void setValue(final V frameBody)
+    public void writeToBuffer(final QpidByteBuffer buffer)
     {
-        _delegate = _registry.getValueWriter(getUnderlyingValue(frameBody));
+        _delegate.writeToBuffer(buffer);
     }
 
-    protected abstract Object getUnderlyingValue(final V frameBody);
+    @Override
+    public int getEncodedSize()
+    {
+        return _delegate.getEncodedSize();
+    }
 
-    public boolean isComplete()
+    public void setValue(final V frameBody)
     {
-        return _delegate.isComplete();
+        _delegate = _registry.getValueWriter(getUnderlyingValue(frameBody));
     }
+
+    protected abstract Object getUnderlyingValue(final V frameBody);
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleWriter.java Sun Dec 11 16:01:06 2016
@@ -25,25 +25,25 @@ public class DoubleWriter extends FixedE
 {
     private static final byte FORMAT_CODE = (byte) 0x82;
 
-
-    @Override
-    byte getFormatCode()
+    public DoubleWriter(final Double object)
     {
-        return FORMAT_CODE;
+        super(Double.doubleToLongBits(object.doubleValue()));
     }
 
     @Override
-    long convertValueToLong(Double value)
+    byte getFormatCode()
     {
-        return Double.doubleToLongBits(value.doubleValue());
+        return FORMAT_CODE;
     }
 
     private static Factory<Double> FACTORY = new Factory<Double>()
                                             {
 
-                                                public ValueWriter<Double> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<Double> newInstance(final Registry registry,
+                                                                                       final Double object)
                                                 {
-                                                    return new DoubleWriter();
+                                                    return new DoubleWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedEightWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedEightWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedEightWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedEightWriter.java Sun Dec 11 16:01:06 2016
@@ -25,84 +25,24 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class FixedEightWriter<T extends Object> implements ValueWriter<T>
 {
-    private int _written = 9;
     private long _value;
 
-    public final int writeToBuffer(QpidByteBuffer buffer)
+    public FixedEightWriter(long value)
     {
-        int remaining = buffer.remaining();
-        int written = _written;
-        switch(written)
-        {
-            case 0:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put(getFormatCode());
-                    remaining--;
-                    written = 1;
-                }
-                else
-                {
-                    break;
-                }
-            case 1:
-                if(remaining>=8)
-                {
-                    buffer.putLong(_value);
-                    written = 9;
-                    break;
-                }
-            case 2:
-            case 3:
-            case 4:
-            case 5:
-                if(remaining >= 4)
-                {
-                    buffer.putInt((int)((_value >> ((5-written)<<3)) & 0xFFFFFFFF ));
-                    remaining-=4;
-                    written+=4;
-                }
-            case 6:
-            case 7:
-                if(remaining >= 2 && written <= 7)
-                {
-                    buffer.putShort((short)((_value >> ((7-written)<<3)) & 0xFFFF ));
-                    remaining -= 2;
-                    written += 2;
-                }
-            case 8:
-                if(remaining >=1 && written != 9)
-                {
-                    buffer.put((byte)((_value >> ((8-written)<<3)) & 0xFF ));
-                    written++;
-                }
-
-
-        }
-        _written = written;
-
-        return 9;
+        _value = value;
     }
 
-    abstract byte getFormatCode();
-
-    public final void setValue(T value)
+    public final void writeToBuffer(QpidByteBuffer buffer)
     {
-        _written = 0;
-        _value = convertValueToLong(value);
+        buffer.put(getFormatCode());
+        buffer.putLong(_value);
     }
 
-    abstract long convertValueToLong(T value);
-
-    public boolean isCacheable()
+    @Override
+    public int getEncodedSize()
     {
-        return true;
-    }
-
-    public final boolean isComplete()
-    {
-        return _written == 9;
+        return 9;
     }
 
-
+    abstract byte getFormatCode();
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedFourWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedFourWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedFourWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedFourWriter.java Sun Dec 11 16:01:06 2016
@@ -25,98 +25,25 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class FixedFourWriter<T extends Object> implements ValueWriter<T>
 {
-    private int _written = 5;
     private int _value;
 
-    public final int writeToBuffer(QpidByteBuffer buffer)
-    {
-        int remaining = buffer.remaining();
-        int written = _written;
-        switch(written)
-        {
-            case 0:
-                if(remaining-- != 0)
-                {
-                    buffer.put(getFormatCode());
-                    written = 1;
-                }
-                else
-                {
-                    break;
-                }
-            case 1:
-                if(remaining>=4)
-                {
-                    buffer.putInt(_value);
-                    written = 5;
-                    break;
-                }
-                else if(remaining-- != 0)
-                {
-                    buffer.put((byte)((_value >> 24)&0xFF));
-                    written = 2;
-                }
-                else
-                {
-                    break;
-                }
-            case 2:
-                if(remaining-- != 0)
-                {
-                    buffer.put((byte)((_value >> 16)&0xFF));
-                    written = 3;
-                }
-                else
-                {
-                    break;
-                }
-            case 3:
-                if(remaining-- != 0)
-                {
-                    buffer.put((byte)((_value >> 8)&0xFF));
-                    written = 4;
-                }
-                else
-                {
-                    break;
-                }
-            case 4:
-                if(remaining-- != 0)
-                {
-                    buffer.put((byte)(_value&0xFF));
-                    written = 5;
-                }
-
-        }
-        _written = written;
-
-        return 5;
-    }
 
-    abstract byte getFormatCode();
-
-    public final void setValue(T value)
+    public FixedFourWriter(int object)
     {
-        if(_written==1)
-        {
-            // TODO - remove
-            System.out.println("Remove");
-        }
-        _written = 0;
-        _value = convertValueToInt(value);
+        _value = object;
     }
 
-    abstract int convertValueToInt(T value);
-
-    public boolean isCacheable()
+    public final void writeToBuffer(QpidByteBuffer buffer)
     {
-        return true;
+        buffer.put(getFormatCode());
+        buffer.putInt(_value);
     }
 
-    public final boolean isComplete()
+    @Override
+    public int getEncodedSize()
     {
-        return _written == 5;
+        return 5;
     }
 
-
+    abstract byte getFormatCode();
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedOneWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedOneWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedOneWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedOneWriter.java Sun Dec 11 16:01:06 2016
@@ -24,56 +24,24 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class FixedOneWriter<T> implements ValueWriter<T>
 {
-    protected int _written = 2;
-    protected byte _value;
+    protected final byte _value;
 
-    public int writeToBuffer(QpidByteBuffer buffer)
+    public FixedOneWriter(final byte value)
     {
-
-        switch(_written)
-        {
-            case 0:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put(getFormatCode());
-                }
-                else
-                {
-                    break;
-                }
-            case 1:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put(_value);
-                    _written = 2;
-                }
-                else
-                {
-                    _written = 1;
-                }
-
-        }
-
-        return 2;
+        _value = value;
     }
 
-    protected abstract byte getFormatCode();
-
-    public boolean isComplete()
+    public void writeToBuffer(QpidByteBuffer buffer)
     {
-        return _written == 2;
+        buffer.put(getFormatCode());
+        buffer.put(_value);
     }
 
-    public boolean isCacheable()
+    @Override
+    public int getEncodedSize()
     {
-        return true;
-    }
-
-    public void setValue(final T value)
-    {
-        _written = 0;
-        _value = convertToByte(value);
+        return 2;
     }
 
-    protected abstract byte convertToByte(final T value);
+    protected abstract byte getFormatCode();
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedSixteenWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedSixteenWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedSixteenWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedSixteenWriter.java Sun Dec 11 16:01:06 2016
@@ -25,102 +25,30 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class FixedSixteenWriter<T extends Object> implements ValueWriter<T>
 {
-    private int _written = 17;
     private long _msb;
     private long _lsb;
 
-    public final int writeToBuffer(QpidByteBuffer buffer)
+    public FixedSixteenWriter()
     {
-        int remaining = buffer.remaining();
-        int written = _written;
-        switch(written)
-        {
-            case 0:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put(getFormatCode());
-                    remaining--;
-                    written = 1;
-                }
-                else
-                {
-                    break;
-                }
-            case 1:
-                if(remaining>=8)
-                {
-                    buffer.putLong(_msb);
-                    written = 9;
-                    break;
-                }
-            case 2:
-            case 3:
-            case 4:
-            case 5:
-                if(remaining >= 4)
-                {
-                    buffer.putInt((int)((_msb >> ((5-written)<<3)) & 0xFFFFFFFF ));
-                    remaining-=4;
-                    written+=4;
-                }
-            case 6:
-            case 7:
-                if(remaining >= 2 && written <= 7)
-                {
-                    buffer.putShort((short)((_msb >> ((7-written)<<3)) & 0xFFFF ));
-                    remaining -= 2;
-                    written += 2;
-                }
-            case 8:
-                if(remaining >=1 && written != 9)
-                {
-                    buffer.put((byte)((_msb >> ((8-written)<<3)) & 0xFF ));
-                    written++;
-                }
-
-
-        }
-        if(remaining != 0)
-        {
-            switch(written)
-            {
-                case 9:
-                    if(remaining>=8)
-                    {
-                        buffer.putLong(_lsb);
-                        written = 17;
-                        break;
-                    }
-                case 10:
-                case 11:
-                case 12:
-                case 13:
-                    if(remaining >= 4)
-                    {
-                        buffer.putInt((int)((_lsb >> ((13-written)<<3)) & 0xFFFFFFFF ));
-                        remaining-=4;
-                        written+=4;
-                    }
-                case 14:
-                case 15:
-                    if(remaining >= 2 && written <= 15)
-                    {
-                        buffer.putShort((short)((_lsb >> ((15-written)<<3)) & 0xFFFF ));
-                        remaining -= 2;
-                        written += 2;
-                    }
-                case 16:
-                    if(remaining >=1 && written != 17)
-                    {
-                        buffer.put((byte)((_msb >> ((16-written)<<3)) & 0xFF ));
-                        written++;
-                    }
-            }
+    }
+
+    public FixedSixteenWriter(T object)
+    {
+        setValue(object);
+    }
 
-        }
 
-        _written = written;
 
+    public final void writeToBuffer(QpidByteBuffer buffer)
+    {
+        buffer.put(getFormatCode());
+        buffer.putLong(_msb);
+        buffer.putLong(_lsb);
+    }
+
+    @Override
+    public int getEncodedSize()
+    {
         return 17;
     }
 
@@ -128,23 +56,10 @@ public abstract class FixedSixteenWriter
 
     public final void setValue(T value)
     {
-        _written = 0;
         _msb = convertValueToMSB(value);
         _lsb = convertValueToLSB(value);
     }
 
     abstract long convertValueToMSB(T value);
     abstract long convertValueToLSB(T value);
-
-    public boolean isCacheable()
-    {
-        return true;
-    }
-
-    public final boolean isComplete()
-    {
-        return _written == 17;
-    }
-
-
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedTwoWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedTwoWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedTwoWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FixedTwoWriter.java Sun Dec 11 16:01:06 2016
@@ -25,71 +25,36 @@ import org.apache.qpid.bytebuffer.QpidBy
 
 public abstract class FixedTwoWriter <T extends Object> implements ValueWriter<T>
 {
-    private int _written = 3;
     private short _value;
 
-    public int writeToBuffer(QpidByteBuffer buffer)
+    public FixedTwoWriter()
     {
+    }
 
-        switch(_written)
-        {
-            case 0:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put(getFormatCode());
-                }
-                else
-                {
-                    break;
-                }
-            case 1:
-
-                if(buffer.remaining()>1)
-                {
-                    buffer.putShort(_value);
-                    _written = 3;
-                }
-                else if(buffer.hasRemaining())
-                {
-                    buffer.put((byte) (0xFF & (_value >> 8)));
-                    _written = 2;
-                }
-                else
-                {
-                    _written = 1;
-                }
-                break;
-            case 2:
-                if(buffer.hasRemaining())
-                {
-                    buffer.put((byte)(0xFF & _value));
-                }
-
+    public FixedTwoWriter(T object)
+    {
+        setValue(object);
+    }
 
-        }
+    public void writeToBuffer(QpidByteBuffer buffer)
+    {
+        buffer.put(getFormatCode());
+        buffer.putShort(_value);
+    }
 
+    @Override
+    public int getEncodedSize()
+    {
         return 3;
     }
 
-
     public final void setValue(T value)
     {
-        _written = 0;
         _value = convertValueToShort(value);
     }
 
     abstract short convertValueToShort(T value);
 
-    public boolean isCacheable()
-    {
-        return true;
-    }
-
-    public boolean isComplete()
-    {
-        return _written == 3;
-    }
-
     abstract byte getFormatCode();
 
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatWriter.java Sun Dec 11 16:01:06 2016
@@ -26,24 +26,25 @@ public class FloatWriter extends FixedFo
     private static final byte FORMAT_CODE = (byte)0x72;
 
 
-    @Override
-    byte getFormatCode()
+    public FloatWriter(final Float object)
     {
-        return FORMAT_CODE;
+        super(Float.floatToIntBits(object));
     }
 
     @Override
-    int convertValueToInt(Float value)
+    byte getFormatCode()
     {
-        return Float.floatToIntBits(value.floatValue());
+        return FORMAT_CODE;
     }
 
     private static Factory<Float> FACTORY = new Factory<Float>()
                                             {
 
-                                                public ValueWriter<Float> newInstance(Registry registry)
+                                                @Override
+                                                public ValueWriter<Float> newInstance(final Registry registry,
+                                                                                      final Float object)
                                                 {
-                                                    return new FloatWriter();
+                                                    return new FloatWriter(object);
                                                 }
                                             };
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FrameWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FrameWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FrameWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FrameWriter.java Sun Dec 11 16:01:06 2016
@@ -54,9 +54,7 @@ public class FrameWriter
         }
         else
         {
-            typeWriter.setValue(frame.getFrameBody());
-            QpidByteBuffer qpidByteBuffer = QpidByteBuffer.wrap(EMPTY_BYTE_ARRAY);
-            bodySize = typeWriter.writeToBuffer(qpidByteBuffer) + 8;
+            bodySize = 8 + typeWriter.getEncodedSize();
         }
 
         QpidByteBuffer body = QpidByteBuffer.allocate(_sender.isDirectBufferPreferred(), bodySize);

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntegerWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntegerWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntegerWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntegerWriter.java Sun Dec 11 16:01:06 2016
@@ -21,86 +21,60 @@
 
 package org.apache.qpid.server.protocol.v1_0.codec;
 
-import org.apache.qpid.bytebuffer.QpidByteBuffer;
-
-public class IntegerWriter implements ValueWriter<Integer>
+public class IntegerWriter
 {
     private static final byte EIGHT_BYTE_FORMAT_CODE = (byte)0x71;
     private static final byte ONE_BYTE_FORMAT_CODE = (byte) 0x54;
 
-    private ValueWriter<Integer> _delegate;
-
-    private final FixedFourWriter<Integer> _eightByteWriter = new FixedFourWriter<Integer>()
-    {
-
-        @Override
-        byte getFormatCode()
-        {
-            return EIGHT_BYTE_FORMAT_CODE;
-        }
+    private static ValueWriter.Factory<Integer> FACTORY = new ValueWriter.Factory<Integer>()
+                                            {
 
-        @Override
-        int convertValueToInt(Integer value)
-        {
-            return value.intValue();
-        }
-    };
+                                                @Override
+                                                public ValueWriter<Integer> newInstance(final ValueWriter.Registry registry,
+                                                                                        final Integer i)
+                                                {
+                                                    if(i >= -128 && i <= 127)
+                                                    {
+                                                        return new IntegerFixedOneWriter(i);
+                                                    }
+                                                    else
+                                                    {
+                                                        return new IntegerFixedFourWriter(i);
+                                                    }
+                                                }
+                                            };
 
-    private final ValueWriter<Integer> _oneByteWriter = new FixedOneWriter<Integer>()
+    public static void register(ValueWriter.Registry registry)
     {
+        registry.register(Integer.class, FACTORY);
+    }
 
-        @Override protected byte getFormatCode()
+    private static class IntegerFixedFourWriter extends FixedFourWriter<Integer>
+    {
+        public IntegerFixedFourWriter(final Integer object)
         {
-            return ONE_BYTE_FORMAT_CODE;
+            super(object);
         }
 
-        @Override protected byte convertToByte(final Integer value)
+        @Override
+        byte getFormatCode()
         {
-            return value.byteValue();
+            return EIGHT_BYTE_FORMAT_CODE;
         }
-    };
 
-
-    public int writeToBuffer(final QpidByteBuffer buffer)
-    {
-        return _delegate.writeToBuffer(buffer);
     }
 
-    public void setValue(final Integer i)
+    private static class IntegerFixedOneWriter extends FixedOneWriter<Integer>
     {
-        if(i >= -128 && i <= 127)
+
+        public IntegerFixedOneWriter(final Integer value)
         {
-            _delegate = _oneByteWriter;
+            super(value.byteValue());
         }
-        else
+
+        @Override protected byte getFormatCode()
         {
-            _delegate = _eightByteWriter;
+            return ONE_BYTE_FORMAT_CODE;
         }
-        _delegate.setValue(i);
-    }
-
-    public boolean isComplete()
-    {
-        return _delegate.isComplete();
-    }
-
-    public boolean isCacheable()
-    {
-        return false;
-    }
-
-
-    private static Factory<Integer> FACTORY = new Factory<Integer>()
-                                            {
-
-                                                public ValueWriter<Integer> newInstance(Registry registry)
-                                                {
-                                                    return new IntegerWriter();
-                                                }
-                                            };
-
-    public static void register(ValueWriter.Registry registry)
-    {
-        registry.register(Integer.class, FACTORY);
     }
 }

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListWriter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListWriter.java?rev=1773584&r1=1773583&r2=1773584&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListWriter.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListWriter.java Sun Dec 11 16:01:06 2016
@@ -25,24 +25,17 @@ import java.util.List;
 
 import org.apache.qpid.bytebuffer.QpidByteBuffer;
 
-public class ListWriter implements ValueWriter<List>
+public class ListWriter
 {
     private static class NonEmptyListWriter extends AbstractListWriter<List>
     {
         private List _list;
         private int _position = 0;
 
-        public NonEmptyListWriter(final Registry registry)
+        public NonEmptyListWriter(final Registry registry, final List object)
         {
-            super(registry);
-        }
-
-        @Override
-        protected void onSetValue(final List value)
-        {
-            _list = value;
-            _position = 0;
-
+            super(registry, object);
+            _list = object;
         }
 
         @Override
@@ -64,13 +57,6 @@ public class ListWriter implements Value
         }
 
         @Override
-        protected void clear()
-        {
-            _list = null;
-            _position = 0;
-        }
-
-        @Override
         protected void reset()
         {
             _position = 0;
@@ -78,96 +64,40 @@ public class ListWriter implements Value
 
     }
 
-    private final NonEmptyListWriter _nonEmptyListWriter;
     private static final byte ZERO_BYTE_FORMAT_CODE = (byte) 0x45;
 
-    private final ValueWriter<List> _emptyListWriter = new EmptyListValueWriter();
+    public static final ValueWriter<List> EMPTY_LIST_WRITER = new EmptyListValueWriter();
 
-
-    private ValueWriter<List> _delegate;
-
-    public ListWriter(final Registry registry)
-    {
-        _nonEmptyListWriter = new NonEmptyListWriter(registry);
-
-    }
-
-
-    public int writeToBuffer(QpidByteBuffer buffer)
+    public static class EmptyListValueWriter implements ValueWriter<List>
     {
-        return _delegate.writeToBuffer(buffer);
-    }
 
-    public void setValue(List frameBody)
-    {
-        if(frameBody.isEmpty())
+        @Override
+        public int getEncodedSize()
         {
-            _delegate = _emptyListWriter;
+            return 1;
         }
-        else
+
+        public void writeToBuffer(QpidByteBuffer buffer)
         {
-            _delegate = _nonEmptyListWriter;
+            buffer.put(ZERO_BYTE_FORMAT_CODE);
         }
-        _delegate.setValue(frameBody);
-    }
-
-    public boolean isComplete()
-    {
-        return _delegate.isComplete();
     }
 
-    public boolean isCacheable()
-    {
-        return false;
-    }
-
-
-
-    private static Factory<List> FACTORY = new Factory<List>()
-                                            {
+    private static ValueWriter.Factory<List> FACTORY =
+            new ValueWriter.Factory<List>()
+            {
 
-                                                public ValueWriter<List> newInstance(Registry registry)
-                                                {
-                                                    return new ListWriter(registry);
-                                                }
-                                            };
+                @Override
+                public ValueWriter<List> newInstance(final ValueWriter.Registry registry,
+                                                     final List object)
+                {
+                    return object.isEmpty() ? EMPTY_LIST_WRITER : new NonEmptyListWriter(registry, object);
+                }
+            };
 
     public static void register(ValueWriter.Registry registry)
     {
         registry.register(List.class, FACTORY);
     }
 
-    public static class EmptyListValueWriter implements ValueWriter<List>
-    {
-        private boolean _complete;
-
-
-        public int writeToBuffer(QpidByteBuffer buffer)
-        {
-
-            if(!_complete && buffer.hasRemaining())
-            {
-                buffer.put(ZERO_BYTE_FORMAT_CODE);
-                _complete = true;
-            }
-
-            return 1;
-        }
-
-        public void setValue(List list)
-        {
-            _complete = false;
-        }
-
-        public boolean isCacheable()
-        {
-            return true;
-        }
-
-        public boolean isComplete()
-        {
-            return _complete;
-        }
-
-    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org