BFSchema.Hierarchy.CalculateStructSize C# (CSharp) Метод

CalculateStructSize() приватный Метод

private CalculateStructSize ( BfsSourceRange range, IBfsStructType structtype ) : void
range BfsSourceRange
structtype IBfsStructType
Результат void
        private void CalculateStructSize(BfsSourceRange range, IBfsStructType structtype)
        {
            int totalstructsize = 0;
            foreach (BfsStructField field in structtype.StructFieldList)
            {
                if (field.PrimitiveType.ArrayExtension == null)
                    totalstructsize += Environments.GetSizeOfPrimitiveType(field.PrimitiveType);
                else
                    if (field.PrimitiveType.ArrayExtension is BfsKnownArray)
                    {
                        BfsKnownArray known = field.PrimitiveType.ArrayExtension as BfsKnownArray;
                        BfsExpGroup expgroup = known.Expression.ExpressionGroup;
                        if (expgroup.Members.Count == 1 && expgroup.Members[0] is BfsNumberExp)
                        {
                            totalstructsize += Environments.GetSizeOfPrimitiveType(field.PrimitiveType)
                                * (int)(expgroup.Members[0] as BfsNumberExp).Value;
                            //BfsCompiler.ReportMessage("Known array of size: " + (expgroup.Members[0] as BfsNumberExp).Value);
                        }
                        else
                            BfsCompiler.ReportError(range,
                                "Could not get size of block '"+structtype.Name+"' as it has a field with non-simple array-extension.");
                    }
                    else
                    {
                        totalstructsize = 0;
                        BfsCompiler.ReportError(range,
                            "Cannot get size of a block with unknown size (because of array extension in: '" + structtype.Name + "." + field.Name + "')");
                        break;
                    }
            }
            structtype.SizeInBytes = totalstructsize;
            //BfsCompiler.ReportWarning(structtype.SourceRange, "Total size of struct: "+ totalstructsize);
        }