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
            });
        }
示例#2
0
        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();");
            }
        }