public void AddElement(DcParameter element) { _elements.Add(element); NumNestedFields = _elements.Count; if (HasFixedByteSize) { HasFixedByteSize = element.HasFixedByteSize; FixedByteSize += element.FixedByteSize; } if (HasFixedStructure) { HasFixedStructure = element.HasFixedStructure; } if (!HasRangeLimits) { HasRangeLimits = element.HasRangeLimits; } if (!HasDefaultValue) { HasDefaultValue = element.HasDefaultValue; } DefaultValueStale = true; }
public override DcParameter AppendArraySpecification(DcUIntRange size) { // If we are a typedef wrap directly if (Typedef != null) { return(new DcArrayParameter(this, size)); } _elementType = _elementType.AppendArraySpecification(size); return(this); }
public DcArrayParameter(DcParameter elementType, DcUIntRange size) { _elementType = elementType; _arraySize = -1; _arraySizeRange = size; HasFixedByteSize = false; Name = elementType.Name; elementType.Name = string.Empty; if (_arraySizeRange.HasOneValue()) { _arraySize = (int)_arraySizeRange.GetOneValue(); } else { HasRangeLimits = true; } if (_arraySize >= 0 && _elementType.HasFixedByteSize) { HasFixedByteSize = true; FixedByteSize = _arraySize * _elementType.FixedByteSize; HasFixedStructure = true; } else { NumLengthBytes = 2; } if (_elementType.HasRangeLimits) { HasRangeLimits = true; } if (_elementType.HasDefaultValue) { HasDefaultValue = true; } HasNestedFields = true; NumNestedFields = _arraySize; PackType = DcPackType.Array; if (_elementType is DcSimpleParameter simpleType) { if (simpleType.Type == DcSubatomicType.Char) { PackType = DcPackType.String; } } }