public override string GetOrDeclareComponentArray(RoslynEcsTranslator.IterationContext ctx, ComponentDefinition componentDefinition, out LocalDeclarationStatementSyntax arrayInitialization, out StatementSyntax arrayDisposal) { arrayInitialization = null; arrayDisposal = null; if (m_DeclaredComponentArray.TryGetValue(componentDefinition, out var arrayName)) { return(arrayName); } Type componentType = componentDefinition.TypeHandle.Resolve(ctx.Stencil); Type arrayType = typeof(NativeArray <>).MakeGenericType(componentType); arrayName = ctx.GetComponentDataArrayName(componentType); m_DeclaredComponentArray.Add(componentDefinition, arrayName); FieldDeclarationSyntax field = RoslynBuilder.DeclareField(arrayType, arrayName, AccessibilityFlags.Public); m_MemberDeclarations.Add(AddAttribute(field, nameof(DeallocateOnJobCompletionAttribute))); m_JobInitializers.Add(AssignmentExpression( SyntaxKind.SimpleAssignmentExpression, IdentifierName(arrayName), RootContext.MakeInitComponentDataArrayExpression(ctx, componentType) )); return(ctx.GetComponentDataArrayName(componentType)); }
public override string GetOrDeclareComponentArray( RoslynEcsTranslator.IterationContext ctx, ComponentDefinition componentDefinition, out LocalDeclarationStatementSyntax arrayInitialization, out StatementSyntax arrayDisposal) { Type resolvedType = componentDefinition.TypeHandle.Resolve(m_Stencil); var arrayName = ctx.GetComponentDataArrayName(resolvedType); Type arrayType = typeof(NativeArray <>).MakeGenericType(resolvedType); arrayInitialization = RoslynBuilder.DeclareLocalVariable( arrayType, arrayName, MakeInitComponentDataArrayExpression(ctx, resolvedType), RoslynBuilder.VariableDeclarationType.InferredType); arrayDisposal = ExpressionStatement( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, IdentifierName(arrayName), IdentifierName(nameof(IDisposable.Dispose))))) .NormalizeWhitespace(); return(arrayName); }
public override string GetOrDeclareComponentArray(RoslynEcsTranslator.IterationContext ctx, string componentTypeName, out LocalDeclarationStatementSyntax arrayInitialization, out StatementSyntax arrayDisposal) { arrayInitialization = null; arrayDisposal = null; if (m_DeclaredComponentArray.TryGetValue(componentTypeName, out var arrayName)) { return(arrayName); } arrayName = ctx.GetComponentDataArrayName(componentTypeName); m_DeclaredComponentArray.Add(componentTypeName, arrayName); var field = FieldDeclaration( VariableDeclaration( GenericName( Identifier("NativeArray")) .WithTypeArgumentList( TypeArgumentList( SingletonSeparatedList <TypeSyntax>( IdentifierName(componentTypeName))))) .WithVariables( SingletonSeparatedList( VariableDeclarator( Identifier(arrayName))))) .WithModifiers( TokenList( Token(SyntaxKind.PublicKeyword))); m_MemberDeclarations.Add(AddAttribute(field, nameof(DeallocateOnJobCompletionAttribute))); m_JobInitializers.Add(AssignmentExpression( SyntaxKind.SimpleAssignmentExpression, IdentifierName(arrayName), RootContext.MakeInitComponentDataArrayExpression(ctx, componentTypeName) )); return(ctx.GetComponentDataArrayName(componentTypeName)); }
public override string GetOrDeclareComponentArray(RoslynEcsTranslator.IterationContext ctx, string componentTypeName, out LocalDeclarationStatementSyntax arrayInitialization, out StatementSyntax arrayDisposal) { var arrayName = ctx.GetComponentDataArrayName(componentTypeName); arrayInitialization = RoslynBuilder.DeclareLocalVariable( (Type)null, arrayName, MakeInitComponentDataArrayExpression(ctx, componentTypeName), RoslynBuilder.VariableDeclarationType.InferredType); arrayDisposal = ExpressionStatement( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, IdentifierName(arrayName), IdentifierName(nameof(IDisposable.Dispose))))) .NormalizeWhitespace(); return(arrayName); }