From ca569eb334ecc93e9dfa7c3f8d3cc73304cae965 Mon Sep 17 00:00:00 2001 From: marcos henrich Date: Tue, 30 Jul 2013 11:25:20 +0100 Subject: [PATCH] Better template function generation, less manual fixes are needed after generation. --- .../Generators/CLI/CLIHeadersTemplate.cs | 18 ++++++++++----- .../Generators/CLI/CLISourcesTemplate.cs | 22 ++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs index dc3274c3..0bafd45d 100644 --- a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs +++ b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs @@ -271,9 +271,6 @@ namespace CppSharp.Generators.CLI var function = functionTemplate.TemplatedFunction; - var typeNames = template.Parameters.Select( - param => "typename " + param.Name).ToList(); - var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, @@ -284,10 +281,19 @@ namespace CppSharp.Generators.CLI var typePrinter = new CLITypePrinter(Driver, typeCtx); var retType = function.ReturnType.Type.Visit(typePrinter, - function.ReturnType.Qualifiers); + function.ReturnType.Qualifiers).Split('<')[0]; + + var typeNamesStr = ""; + var paramNamesStr = ""; + var paramNames = template.Parameters.Select(param => param.Name).ToList(); + if (paramNames.Any()) + { + typeNamesStr = "typename " + string.Join(", typename ", paramNames); + paramNamesStr = string.Join(", ", paramNames); + } - WriteLine("generic<{0}>", string.Join(", ", typeNames)); - WriteLine("{0} {1}({2});", retType, SafeIdentifier(function.Name), + WriteLine("generic<{0}>", typeNamesStr); + WriteLine("{0}<{1}> {2}({3});", retType, paramNamesStr, SafeIdentifier(function.Name), GenerateParametersList(function.Parameters)); } PopIndent(); diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs index 2a5bf296..2e71244c 100644 --- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs +++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs @@ -204,9 +204,6 @@ namespace CppSharp.Generators.CLI var function = template.TemplatedFunction; - var typeNames = template.Parameters.Select( - param => "typename " + param.Name).ToList(); - var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, @@ -217,12 +214,21 @@ namespace CppSharp.Generators.CLI var typePrinter = new CLITypePrinter(Driver, typeCtx); var retType = function.ReturnType.Type.Visit(typePrinter, - function.ReturnType.Qualifiers); + function.ReturnType.Qualifiers).Split('<')[0]; + + var typeNamesStr = ""; + var paramNamesStr = ""; + var paramNames = template.Parameters.Select(param => param.Name).ToList(); + if (paramNames.Any()) + { + typeNamesStr = "typename " + string.Join(", typename ", paramNames); + paramNamesStr = string.Join(", ", paramNames); + } - WriteLine("generic<{0}>", string.Join(", ", typeNames)); - WriteLine("{0} {1}::{2}({3})", retType, QualifiedIdentifier(@class), - SafeIdentifier(function.Name), - GenerateParametersList(function.Parameters)); + WriteLine("generic<{0}>", typeNamesStr); + WriteLine("{0}<{1}> {2}::{3}({4});", retType, paramNamesStr, + QualifiedIdentifier(@class), SafeIdentifier(function.Name), + GenerateParametersList(function.Parameters)); WriteStartBraceIndent();