private StatementSyntax GenerateCopyMemory()

in SharpGen/Generator/Marshallers/ValueTypeArrayMarshaller.Copy.cs [27:71]


        private StatementSyntax GenerateCopyMemory(CsMarshalBase marshallable, ArrayCopyDirection direction)
        {
            static VariableDeclaratorSyntax FixedDeclaration(SyntaxToken name, ExpressionSyntax source) =>
                VariableDeclarator(
                    name,
                    default,
                    EqualsValueClause(PrefixUnaryExpression(SyntaxKind.AddressOfExpression, source))
                );

            // managed is  __to  when NativeToManaged, __from when ManagedToNative
            //  native is __from when NativeToManaged,  __to  when ManagedToNative
            var (managed, native) = CopyDirectionToIdentifiers(
                direction, Identifier(ToIdentifier), Identifier(FromIdentifier)
            );

            return FixedStatement(
                VariableDeclaration(
                    VoidPtrType,
                    SeparatedList(
                        new[]
                        {
                            FixedDeclaration(
                                managed,
                                ElementAccessExpression(
                                    IdentifierName(marshallable.Name),
                                    BracketedArgumentList(SingletonSeparatedList(Argument(ZeroLiteral)))
                                )
                            ),
                            FixedDeclaration(native, GetMarshalStorageLocation(marshallable))
                        }
                    )
                ),
                GenerateCopyMemoryInvocation(
                    BinaryExpression(
                        SyntaxKind.MultiplyExpression,
                        LiteralExpression(
                            SyntaxKind.NumericLiteralExpression,
                            Literal(marshallable.ArrayDimensionValueUnsigned)
                        ),
                        SizeOf(marshallable.MarshalType)
                    ),
                    castTo: false, castFrom: false
                )
            );
        }