private TypeDefinition GetFieldTypeForFixedArray(ArrayType arrayType) { var fixedSize = (int)arrayType.Size; var elementType = arrayType.Type; var elementTypeDefinition = GetTypeDefinition(elementType); var name = elementTypeDefinition.Name + "_array" + fixedSize; if (elementType.IsPointer()) { name = TypeHelper.GetTypeName(elementType.GetPointee()) + "_ptrArray" + fixedSize; } if (elementType is ArrayType) { name = TypeHelper.GetTypeName(((ArrayType)elementType).Type) + "_arrayOfArray" + fixedSize; } if (!_context.IsKnownUnitName(name)) { var fixedArray = new FixedArrayDefinition { Name = name, Size = fixedSize, ElementType = elementTypeDefinition, IsPrimitive = elementType.IsPrimitiveType() }; _context.AddUnit(fixedArray); } return(new TypeDefinition { Name = name, ByReference = !arrayType.QualifiedType.Qualifiers.IsConst }); }
public void Write(FixedArrayDefinition array) { WriteLine($"public unsafe struct {array.Name}"); using (BeginBlock()) { var prefix = "_"; var size = array.Size; var elementType = array.ElementType.Name; WriteLine($"public static readonly int Size = {size};"); if (array.IsPrimitive) { WritePrimitiveFixedArray(array.Name, elementType, size, prefix); } else { WriteComplexFixedArray(elementType, size, prefix); } WriteLine($"public static implicit operator {elementType}[]({array.Name} @struct) => @struct.ToArray();"); } }