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;
}
}