コード例 #1
0
ファイル: CSharpBinder.cs プロジェクト: chrisculy/epoxy
        public override void GenerateLanguageBindings(Graph graph)
        {
            if (!Directory.Exists(Configuration.LanguageBindingsDirectory))
            {
                Directory.CreateDirectory(Configuration.LanguageBindingsDirectory);
            }

            foreach (Class classDefinition in graph.Classes)
            {
                WriteCsClass(classDefinition, Path.Combine(Configuration.LanguageBindingsDirectory, $"{ToPascalCase(classDefinition.Name)}.cs"));
            }

            using (IndentedWriter writer = new IndentedWriter($"{Path.Combine(Configuration.LanguageBindingsDirectory, Configuration.GlobalsClassName)}.cs"))
            {
                WriteFileHeader(writer);

                writer.WriteLine($"namespace {Configuration.GlobalsNamespace}");
                using (Scope namespaceScope = writer.IndentBlock())
                {
                    writer.WriteLine($"public static class {Configuration.GlobalsClassName}");
                    using (Scope classScope = writer.IndentBlock())
                    {
                        // write out the functions
                        foreach (Function function in graph.Functions)
                        {
                            WriteCsFunction(function, writer);
                        }

                        // write out the variables
                        foreach (Variable variable in graph.Variables)
                        {
                            WriteCsVariable(variable, writer);
                        }

                        // write out the native bindings for the functions
                        foreach (Function function in graph.Functions)
                        {
                            WriteFunctionNativeBindings(function, writer);
                        }

                        // write out the native bindings for the variables
                        foreach (Variable variable in graph.Variables)
                        {
                            WriteVariableNativeBindings(variable, writer);
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: CSharpBinder.cs プロジェクト: chrisculy/epoxy
        private void WriteCsClass(Class classDefinition, string filePath)
        {
            using (IndentedWriter writer = new IndentedWriter(filePath))
            {
                WriteFileHeader(writer);

                writer.WriteLine($"namespace {ToCsNamespace(classDefinition.Namespace)}");
                using (Scope namespaceScope = writer.IndentBlock())
                {
                    string className = ToPascalCase(classDefinition.Name);
                    writer.WriteLine($"class {className} : SafeEpoxyHandle");

                    using (Scope classScope = writer.IndentBlock())
                    {
                        // write out the constructor, destructor, and the member functions
                        foreach (Function function in classDefinition.Functions)
                        {
                            WriteCsFunction(function, writer);
                        }

                        // write out the member variables
                        foreach (Variable variable in classDefinition.Variables)
                        {
                            WriteCsVariable(variable, writer);
                        }

                        // write out the native bindings for the functions
                        foreach (Function function in classDefinition.Functions)
                        {
                            WriteFunctionNativeBindings(function, writer);
                        }

                        // write out the native bindings for the variables
                        foreach (Variable variable in classDefinition.Variables)
                        {
                            WriteVariableNativeBindings(variable, writer);
                        }
                    }
                }
            }
        }
コード例 #3
0
ファイル: CSharpBinder.cs プロジェクト: chrisculy/epoxy
        private void WriteCsFunction(Function function, IndentedWriter writer)
        {
            string returnType = ToCsReturnType(function.Return);
            string qualifiers = function.IsStatic || !function.IsClassMember ? "static " : "";

            writer.WriteLine($"public {qualifiers}{returnType} {ToPascalCase(function.Name)}{ToCsParameterString(function.Parameters)}");
            using (Scope functionScope = writer.IndentBlock())
            {
                writer.WriteLine($@"{(returnType == "void" ? "" : "return ")}{ToNativeFunction(function)}({(string.Join(", ", function.Parameters.Select(parameter => parameter.Name)))});");
            }
            writer.WriteLine();
        }
コード例 #4
0
ファイル: CSharpBinder.cs プロジェクト: chrisculy/epoxy
        private void WriteCsVariable(Variable variable, IndentedWriter writer)
        {
            // TODO: is return type the right marshalling strategy here?
            string qualifiers = variable.IsStatic || !variable.IsClassMember ? "static " : "";

            writer.WriteLine($"public {qualifiers}{ToCsReturnType(variable)} {ToPascalCase(variable.Name)}");
            using (Scope propertyScope = writer.IndentBlock())
            {
                writer.WriteLine($"get {{ return {ToNativeVariableGet(variable)}(); }}");
                writer.WriteLine($"set {{ {ToNativeVariableSet(variable)}(value); }}");
            }
            writer.WriteLine();
        }