in src/Proton.TestPeer/Codec/Impl/MapElement.cs [100:163]
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.Small:
stream.WriteByte((byte)(size + 1));
stream.WriteByte((byte)count);
break;
case ConstructorType.Large:
stream.WriteUnsignedInt(size + 4);
stream.WriteUnsignedInt(count);
break;
case ConstructorType.Tiny:
break;
default:
break;
}
}
else
{
if (size <= 254 && count <= 255)
{
stream.WriteByte(0xc1);
stream.WriteByte((byte)(size + 1));
stream.WriteByte((byte)count);
}
else
{
stream.WriteByte(0xd1);
stream.WriteUnsignedInt(size + 4);
stream.WriteUnsignedInt(count);
}
}
elt = first;
while (elt != null)
{
elt.Encode(stream);
elt = elt.Next;
}
return encodedSize;
}
}