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 2012/07/03 15:26:00 UTC

svn commit: r1356718 - in /qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec: EncodingCodes.java ListType.java

Author: rgodfrey
Date: Tue Jul  3 13:25:59 2012
New Revision: 1356718

URL: http://svn.apache.org/viewvc?rev=1356718&view=rev
Log:
NO-JIRA : [proton-j] add empty list encoding

Modified:
    qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/EncodingCodes.java
    qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/ListType.java

Modified: qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/EncodingCodes.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/EncodingCodes.java?rev=1356718&r1=1356717&r2=1356718&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/EncodingCodes.java (original)
+++ qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/EncodingCodes.java Tue Jul  3 13:25:59 2012
@@ -77,6 +77,7 @@ interface EncodingCodes
     public static final byte SYM8                     = (byte) 0xa3;
     public static final byte SYM32                    = (byte) 0xb3;
 
+    public static final byte LIST0                    = (byte) 0x45;
     public static final byte LIST8                    = (byte) 0xc0;
     public static final byte LIST32                   = (byte) 0xd0;
 

Modified: qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/ListType.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/ListType.java?rev=1356718&r1=1356717&r2=1356718&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/ListType.java (original)
+++ qpid/proton/trunk/proton-j/src/org/apache/qpid/proton/codec/ListType.java Tue Jul  3 13:25:59 2012
@@ -23,12 +23,14 @@ package org.apache.qpid.proton.codec;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 public class ListType extends AbstractPrimitiveType<List>
 {
     private final ListEncoding _listEncoding;
     private final ListEncoding _shortListEncoding;
+    private final ListEncoding _zeroListEncoding;
     private EncoderImpl _encoder;
 
     private static interface ListEncoding extends PrimitiveTypeEncoding<List>
@@ -41,6 +43,7 @@ public class ListType extends AbstractPr
         _encoder = encoder;
         _listEncoding = new AllListEncoding(encoder, decoder);
         _shortListEncoding = new ShortListEncoding(encoder, decoder);
+        _zeroListEncoding = new ZeroListEncoding(encoder, decoder);
         encoder.register(List.class, this);
         decoder.register(this);
     }
@@ -54,9 +57,11 @@ public class ListType extends AbstractPr
     {
 
         int calculatedSize = calculateSize(val, _encoder);
-        ListEncoding encoding = (val.size() > 255 || calculatedSize >= 254)
-                                    ? _listEncoding
-                                    : _shortListEncoding;
+        ListEncoding encoding = val.isEmpty() 
+                                    ? _zeroListEncoding 
+                                    : (val.size() > 255 || calculatedSize >= 254)
+                                        ? _listEncoding
+                                        : _shortListEncoding;
 
         encoding.setValue(val, calculatedSize);
         return encoding;
@@ -84,7 +89,7 @@ public class ListType extends AbstractPr
 
     public Collection<ListEncoding> getAllEncodings()
     {
-        return Arrays.asList(_shortListEncoding, _listEncoding);
+        return Arrays.asList(_zeroListEncoding, _shortListEncoding, _listEncoding);
     }
 
     private class AllListEncoding
@@ -232,4 +237,53 @@ public class ListType extends AbstractPr
             _length = length;
         }
     }
+
+    
+    private class ZeroListEncoding
+            extends FixedSizePrimitiveTypeEncoding<List>
+            implements ListEncoding
+    {
+        public ZeroListEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.LIST0;
+        }
+
+        @Override
+        protected int getFixedSize()
+        {
+            return 0;
+        }
+
+
+        public ListType getType()
+        {
+           return ListType.this;
+        }
+
+        public void setValue(List value, int length)
+        {
+        }
+
+        public void writeValue(final List val)
+        {
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<List> encoder)
+        {
+            return encoder == this;
+        }
+
+        public List readValue()
+        {
+            return Collections.EMPTY_LIST;
+        }
+
+
+    }
 }



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