コード例 #1
0
        public void CalculateFixedSerializationLength()
        {
            if (calculatedFixedSerializationLength)
            {
                throw new InvalidOperationException(
                          "Cannot calculate FixedSerializationLength after it has already been calculated");
            }

            UInt32 length = 0;

            for (int i = 0; i < fields.Count; i++)
            {
                ObjectDefinitionField field = fields[i];
                TypeReference         fieldTypeReference = field.typeReference;
                UInt32 fieldFixedSerializationLength     = fieldTypeReference.FixedElementSerializationLength;
                if (fieldFixedSerializationLength == UInt32.MaxValue)
                {
                    this.fixedSerializationLength      = UInt32.MaxValue;
                    calculatedFixedSerializationLength = true;
                    return;
                }

                PdlArrayType arrayType = fieldTypeReference.arrayType;
                if (arrayType == null)
                {
                    length += fieldFixedSerializationLength;
                }
                else
                {
                    if (arrayType.type != PdlArraySizeTypeEnum.Fixed)
                    {
                        this.fixedSerializationLength      = UInt32.MaxValue;
                        calculatedFixedSerializationLength = true;
                        return;
                    }
                    length += arrayType.GetFixedArraySize() * fieldFixedSerializationLength;
                }
            }

            this.fixedSerializationLength      = length;
            calculatedFixedSerializationLength = true;
        }