コード例 #1
0
        public void RenderInitializer(GeneratorExecutionContext context, IndentedStringBuilder stringBuilder,
                                      IteratorGenerator iteratorGenerator)
        {
            if (Cardinality.HasValue)
            {
                var propertyConstructionString = $"new IUpdateField[{Cardinality.Value}]";
                if (PropertySymbol != null)
                {
                    if (PropertySymbol.Type is IArrayTypeSymbol arrayTypeSymbol)
                    {
                        var baseType = arrayTypeSymbol.ElementType;
                        propertyConstructionString = $"new {baseType}[{Cardinality.Value}]";
                    }
                }

                stringBuilder.AppendLine();

                stringBuilder.AppendLine($"{EnumerationSymbol.Name} = {propertyConstructionString};");
                stringBuilder.AppendLine($"{EnumerationSymbol.Name}[0] = {GetElementInitializer(context)};");

                using var rentedIterator = iteratorGenerator.Rent();
                using (stringBuilder.BlockInvariant(false, $"for (var {rentedIterator} = 1; {rentedIterator} < {Cardinality.Value}; ++{rentedIterator})"))
                    stringBuilder.AppendLine($"{EnumerationSymbol.Name}[{rentedIterator}] = {GetElementInitializer(context, rentedIterator)};");

                stringBuilder.AppendLine();
            }
            else
            {
                stringBuilder.AppendLine($"{EnumerationSymbol.Name} = {GetElementInitializer(context)};");
            }
        }
コード例 #2
0
        public void RenderParser(IndentedStringBuilder stringBuilder, IteratorGenerator iteratorGenerator)
        {
            if (Cardinality.HasValue)
            {
                stringBuilder.AppendLine();

                using var rentedIterator = iteratorGenerator.Rent();
                using (stringBuilder.BlockInvariant(false, $"for (var {rentedIterator} = 0; {rentedIterator} < {Cardinality.Value}; ++{rentedIterator})"))
                    stringBuilder.AppendLine($"{EnumerationSymbol.Name}[{rentedIterator}].ReadValue(packet, updateMask);");

                stringBuilder.AppendLine();
            }
            else
            {
                stringBuilder.AppendLine($"{EnumerationSymbol.Name}.ReadValue(packet, updateMask);");
            }
        }