public override uint Encode()

in src/Proton.TestPeer/Codec/Impl/ListElement.cs [91:156]


      public override uint Encode(Stream stream)
      {
         uint encodedSize = ComputeSize();

         uint count = 0;
         uint size = 0;
         IElement elt = first;
         while (elt != null)
         {
            count++;
            size += elt.GetSize();
            elt = elt.Next;
         }

         if (!stream.IsWritable())
         {
            return 0;
         }
         else
         {
            if (IsElementOfArray())
            {
               switch (((ArrayElement)Parent).ConstructorType)
               {
                  case ConstructorType.Tiny:
                     break;
                  case ConstructorType.Small:
                     stream.WriteByte((byte)(size + 1));
                     stream.WriteByte((byte)count);
                     break;
                  case ConstructorType.Large:
                     stream.WriteUnsignedInt((size + 4));
                     stream.WriteUnsignedInt(count);
                     break;
               }
            }
            else
            {
               if (count == 0)
               {
                  stream.WriteByte(0x45);
               }
               else if (size <= 254 && count <= 255)
               {
                  stream.WriteByte(0xc0);
                  stream.WriteByte((byte)(size + 1));
                  stream.WriteByte((byte)count);
               }
               else
               {
                  stream.WriteByte(0xd0);
                  stream.WriteUnsignedInt((size + 4));
                  stream.WriteUnsignedInt(count);
               }
            }

            elt = first;
            while (elt != null)
            {
               elt.Encode(stream);
               elt = elt.Next;
            }

            return encodedSize;
         }
      }