public override int GetValueEncodeSize()
        {
            if (this.FieldCount == 0)
            {
                return(1);
            }
            int num = this.OnValueSize();
            int encodeWidthByCountAndSize = AmqpEncoding.GetEncodeWidthByCountAndSize(this.FieldCount, num);

            return(1 + encodeWidthByCountAndSize + encodeWidthByCountAndSize + num);
        }
Beispiel #2
0
        internal override int GetValueEncodeSize()
        {
            if (this.FieldCount == 0)
            {
                return(FixedWidth.FormatCode);
            }

            int valueSize = this.OnValueSize();
            int width     = AmqpEncoding.GetEncodeWidthByCountAndSize(this.FieldCount, valueSize);

            return(FixedWidth.FormatCode + width + width + valueSize);
        }
Beispiel #3
0
        internal override void EncodeValue(ByteBuffer buffer)
        {
            if (this.FieldCount == 0)
            {
                AmqpBitConverter.WriteUByte(buffer, FormatCode.List0);
            }
            else
            {
                int valueSize   = this.OnValueSize();
                int encodeWidth = AmqpEncoding.GetEncodeWidthByCountAndSize(this.FieldCount, valueSize);
                int sizeOffset;
                if (encodeWidth == FixedWidth.UByte)
                {
                    AmqpBitConverter.WriteUByte(buffer, FormatCode.List8);
                    sizeOffset = buffer.Length;
                    AmqpBitConverter.WriteUByte(buffer, 0);
                    AmqpBitConverter.WriteUByte(buffer, (byte)this.FieldCount);
                }
                else
                {
                    AmqpBitConverter.WriteUByte(buffer, FormatCode.List32);
                    sizeOffset = buffer.Length;
                    AmqpBitConverter.WriteUInt(buffer, 0);
                    AmqpBitConverter.WriteUInt(buffer, (uint)this.FieldCount);
                }

                this.OnEncode(buffer);

                // the actual encoded value size may be different from the calculated
                // valueSize. However, it can only become smaller. This allows for
                // reserving space in the buffer using the longest encoding form of a
                // value. For example, if the delivery id of a transfer is unknown, we
                // can use uint.Max for calculating encode size, but the actual encoding
                // could be small uint.
                int size = buffer.Length - sizeOffset - encodeWidth;
                if (encodeWidth == FixedWidth.UByte)
                {
                    AmqpBitConverter.WriteUByte(buffer.Buffer, sizeOffset, (byte)size);
                }
                else
                {
                    AmqpBitConverter.WriteUInt(buffer.Buffer, sizeOffset, (uint)size);
                }
            }
        }
        public override void EncodeValue(ByteBuffer buffer)
        {
            int length;

            if (this.FieldCount == 0)
            {
                AmqpBitConverter.WriteUByte(buffer, 69);
                return;
            }
            int num = this.OnValueSize();
            int encodeWidthByCountAndSize = AmqpEncoding.GetEncodeWidthByCountAndSize(this.FieldCount, num);

            if (encodeWidthByCountAndSize != 1)
            {
                AmqpBitConverter.WriteUByte(buffer, 208);
                length = buffer.Length;
                buffer.Append(4);
                AmqpBitConverter.WriteUInt(buffer, (uint)this.FieldCount);
            }
            else
            {
                AmqpBitConverter.WriteUByte(buffer, 192);
                length = buffer.Length;
                buffer.Append(1);
                AmqpBitConverter.WriteUByte(buffer, (byte)this.FieldCount);
            }
            this.OnEncode(buffer);
            int length1 = buffer.Length - length - encodeWidthByCountAndSize;

            if (encodeWidthByCountAndSize != 1)
            {
                AmqpBitConverter.WriteUInt(buffer.Buffer, length, (uint)length1);
                return;
            }
            AmqpBitConverter.WriteUByte(buffer.Buffer, length, (byte)length1);
        }