mirror of https://github.com/mono/CppSharp.git
c-sharpdotnetmonobindingsbridgecclangcpluspluscppsharpglueinteropparserparsingpinvokeswigsyntax-treevisitorsxamarinxamarin-bindings
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
684 lines
20 KiB
684 lines
20 KiB
// ------------------------------------------------------------------------------ |
|
// <auto-generated> |
|
// This code was generated by a tool. |
|
// Runtime Version: 10.0.0.0 |
|
// |
|
// Changes to this file may cause incorrect behavior and will be lost if |
|
// the code is regenerated. |
|
// </auto-generated> |
|
// ------------------------------------------------------------------------------ |
|
namespace Cxxi.Templates |
|
{ |
|
using System; |
|
|
|
|
|
#line 1 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "10.0.0.0")] |
|
public partial class CSharpModule : CSharpModuleBase |
|
{ |
|
public virtual string TransformText() |
|
{ |
|
this.Write("using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace "); |
|
|
|
#line 6 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(SafeIdentifier(Library.Name))); |
|
|
|
#line default |
|
#line hidden |
|
this.Write("\r\n{\r\n"); |
|
|
|
#line 8 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
GenerateDeclarations(); |
|
|
|
|
|
#line default |
|
#line hidden |
|
this.Write("}\r\n\r\n"); |
|
return this.GenerationEnvironment.ToString(); |
|
} |
|
|
|
#line 13 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateDeclarations() |
|
{ |
|
PushIndent(DefaultIndent); |
|
|
|
bool NeedsNewline = false; |
|
|
|
// Generate all the enum declarations for the module. |
|
for(int i = 0; i < Module.Global.Enums.Count; ++i) |
|
{ |
|
var E = Module.Global.Enums[i]; |
|
if (E.Ignore) continue; |
|
|
|
GenerateEnum(E); |
|
NeedsNewline = true; |
|
if (i < Module.Global.Enums.Count - 1) |
|
WriteLine(""); |
|
} |
|
|
|
if (NeedsNewline) |
|
WriteLine(""); |
|
|
|
NeedsNewline = false; |
|
|
|
// Generate all the struct/class declarations for the module. |
|
for(int i = 0; i < Module.Global.Classes.Count; ++i) |
|
{ |
|
var C = Module.Global.Classes[i]; |
|
if (C.Ignore) continue; |
|
|
|
GenerateClass(C); |
|
NeedsNewline = true; |
|
if (i < Module.Global.Classes.Count - 1) |
|
WriteLine(""); |
|
} |
|
|
|
if (NeedsNewline) |
|
WriteLine(""); |
|
|
|
if (Module.Global.HasFunctions) |
|
{ |
|
WriteLine("public partial class " + SafeIdentifier(Library.Name)); |
|
WriteLine("{"); |
|
PushIndent(DefaultIndent); |
|
} |
|
|
|
// Generate all the function declarations for the module. |
|
foreach(var E in Module.Global.Functions) |
|
{ |
|
GenerateFunction(E); |
|
} |
|
|
|
if (Module.Global.HasFunctions) |
|
{ |
|
PopIndent(); |
|
WriteLine("}"); |
|
} |
|
|
|
PopIndent(); |
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 75 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateTypeCommon(Declaration T) |
|
{ |
|
GenerateSummary(T.BriefComment); |
|
GenerateDebug(T); |
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 83 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateClass(Class C) |
|
{ |
|
if(C.Ignore) return; |
|
GenerateTypeCommon(C); |
|
|
|
Write("public "); |
|
|
|
if (C.IsAbstract) |
|
Write("abstract "); |
|
|
|
Write("class {0}", C.Name); |
|
|
|
if (C.HasBase) |
|
Write(" : {0}", C.Bases[0].Class.Name); |
|
|
|
WriteLine(String.Empty); |
|
WriteLine("{"); |
|
|
|
PushIndent(DefaultIndent); |
|
foreach(var F in C.Fields) |
|
{ |
|
GenerateTypeCommon(F); |
|
WriteLine("public {0} {1};", F.Type, F.Name); |
|
} |
|
PopIndent(); |
|
|
|
WriteLine("}"); |
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 115 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateFunction(Function F) |
|
{ |
|
if(F.Ignore) return; |
|
GenerateTypeCommon(F); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 120 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("[DllImport(\""); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 121 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(SafeIdentifier(Library.Name))); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 121 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(".dll\")]\r\npublic static extern "); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 122 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(F.ReturnType)); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 122 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(" "); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 122 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(SafeIdentifier(F.Name))); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 122 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("("); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 122 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
for(int i = 0; i < F.Parameters.Count; ++i) |
|
{ |
|
var P = F.Parameters[i]; |
|
Write("{0} {1}", P.Type, SafeIdentifier(P.Name)); |
|
if (i < F.Parameters.Count - 1) |
|
Write(", "); |
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 130 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(");\r\n"); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 131 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
WriteLine(""); |
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 136 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateDebug(Declaration T) |
|
{ |
|
if(Options.OutputDebug && !String.IsNullOrWhiteSpace(T.DebugText)) |
|
WriteLine("// DEBUG: " + T.DebugText); |
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 144 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateSummary(string Comment) |
|
{ |
|
if(String.IsNullOrWhiteSpace(Comment)) |
|
return; |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 149 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("/// <summary>\r\n/// "); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 151 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(Comment)); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 151 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("\r\n/// </summary>\r\n"); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 153 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 157 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateInlineSummary(string Comment) |
|
{ |
|
if(String.IsNullOrWhiteSpace(Comment)) |
|
return; |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 162 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("/// <summary> "); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 163 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(Comment)); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 163 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(" </summary>\r\n"); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 164 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 168 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
public void GenerateEnum(Enumeration E) |
|
{ |
|
if(E.Ignore) return; |
|
GenerateTypeCommon(E); |
|
|
|
if(E.Modifiers.HasFlag(Enumeration.EnumModifiers.Flags)) |
|
WriteLine("[Flags]"); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 176 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("public enum "); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 177 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write(this.ToStringHelper.ToStringWithCulture(SafeIdentifier(E.Name))); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 177 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("\r\n"); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 178 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
if(E.Type.Type != PrimitiveType.Int32) |
|
WriteLine(" : {0}", E.Type.Type.ConvertToTypeName()); |
|
WriteLine("{"); |
|
|
|
PushIndent(DefaultIndent); |
|
for(int i = 0; i < E.Items.Count; ++i) |
|
{ |
|
var I = E.Items[i]; |
|
GenerateInlineSummary(I.Comment); |
|
if (I.ExplicitValue) |
|
Write(String.Format("{0} = {1}", SafeIdentifier(I.Name), I.Value)); |
|
else |
|
Write(String.Format("{0}", SafeIdentifier(I.Name))); |
|
|
|
if (i < E.Items.Count - 1) |
|
WriteLine(","); |
|
} |
|
PopIndent(); |
|
WriteLine(""); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 198 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
this.Write("}\r\n"); |
|
|
|
|
|
#line default |
|
#line hidden |
|
|
|
#line 200 "C:\Users\Tritonite\Development\cxxi\src\Generator\Templates\CSharpModule.tt" |
|
|
|
} |
|
|
|
|
|
#line default |
|
#line hidden |
|
} |
|
|
|
#line default |
|
#line hidden |
|
#region Base class |
|
/// <summary> |
|
/// Base class for this transformation |
|
/// </summary> |
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "10.0.0.0")] |
|
public class CSharpModuleBase |
|
{ |
|
#region Fields |
|
private global::System.Text.StringBuilder generationEnvironmentField; |
|
private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; |
|
private global::System.Collections.Generic.List<int> indentLengthsField; |
|
private string currentIndentField = ""; |
|
private bool endsWithNewline; |
|
private global::System.Collections.Generic.IDictionary<string, object> sessionField; |
|
#endregion |
|
#region Properties |
|
/// <summary> |
|
/// The string builder that generation-time code is using to assemble generated output |
|
/// </summary> |
|
protected System.Text.StringBuilder GenerationEnvironment |
|
{ |
|
get |
|
{ |
|
if ((this.generationEnvironmentField == null)) |
|
{ |
|
this.generationEnvironmentField = new global::System.Text.StringBuilder(); |
|
} |
|
return this.generationEnvironmentField; |
|
} |
|
set |
|
{ |
|
this.generationEnvironmentField = value; |
|
} |
|
} |
|
/// <summary> |
|
/// The error collection for the generation process |
|
/// </summary> |
|
public System.CodeDom.Compiler.CompilerErrorCollection Errors |
|
{ |
|
get |
|
{ |
|
if ((this.errorsField == null)) |
|
{ |
|
this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); |
|
} |
|
return this.errorsField; |
|
} |
|
} |
|
/// <summary> |
|
/// A list of the lengths of each indent that was added with PushIndent |
|
/// </summary> |
|
private System.Collections.Generic.List<int> indentLengths |
|
{ |
|
get |
|
{ |
|
if ((this.indentLengthsField == null)) |
|
{ |
|
this.indentLengthsField = new global::System.Collections.Generic.List<int>(); |
|
} |
|
return this.indentLengthsField; |
|
} |
|
} |
|
/// <summary> |
|
/// Gets the current indent we use when adding lines to the output |
|
/// </summary> |
|
public string CurrentIndent |
|
{ |
|
get |
|
{ |
|
return this.currentIndentField; |
|
} |
|
} |
|
/// <summary> |
|
/// Current transformation session |
|
/// </summary> |
|
public virtual global::System.Collections.Generic.IDictionary<string, object> Session |
|
{ |
|
get |
|
{ |
|
return this.sessionField; |
|
} |
|
set |
|
{ |
|
this.sessionField = value; |
|
} |
|
} |
|
#endregion |
|
#region Transform-time helpers |
|
/// <summary> |
|
/// Write text directly into the generated output |
|
/// </summary> |
|
public void Write(string textToAppend) |
|
{ |
|
if (string.IsNullOrEmpty(textToAppend)) |
|
{ |
|
return; |
|
} |
|
// If we're starting off, or if the previous text ended with a newline, |
|
// we have to append the current indent first. |
|
if (((this.GenerationEnvironment.Length == 0) |
|
|| this.endsWithNewline)) |
|
{ |
|
this.GenerationEnvironment.Append(this.currentIndentField); |
|
this.endsWithNewline = false; |
|
} |
|
// Check if the current text ends with a newline |
|
if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) |
|
{ |
|
this.endsWithNewline = true; |
|
} |
|
// This is an optimization. If the current indent is "", then we don't have to do any |
|
// of the more complex stuff further down. |
|
if ((this.currentIndentField.Length == 0)) |
|
{ |
|
this.GenerationEnvironment.Append(textToAppend); |
|
return; |
|
} |
|
// Everywhere there is a newline in the text, add an indent after it |
|
textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); |
|
// If the text ends with a newline, then we should strip off the indent added at the very end |
|
// because the appropriate indent will be added when the next time Write() is called |
|
if (this.endsWithNewline) |
|
{ |
|
this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); |
|
} |
|
else |
|
{ |
|
this.GenerationEnvironment.Append(textToAppend); |
|
} |
|
} |
|
/// <summary> |
|
/// Write text directly into the generated output |
|
/// </summary> |
|
public void WriteLine(string textToAppend) |
|
{ |
|
this.Write(textToAppend); |
|
this.GenerationEnvironment.AppendLine(); |
|
this.endsWithNewline = true; |
|
} |
|
/// <summary> |
|
/// Write formatted text directly into the generated output |
|
/// </summary> |
|
public void Write(string format, params object[] args) |
|
{ |
|
this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); |
|
} |
|
/// <summary> |
|
/// Write formatted text directly into the generated output |
|
/// </summary> |
|
public void WriteLine(string format, params object[] args) |
|
{ |
|
this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); |
|
} |
|
/// <summary> |
|
/// Raise an error |
|
/// </summary> |
|
public void Error(string message) |
|
{ |
|
System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); |
|
error.ErrorText = message; |
|
this.Errors.Add(error); |
|
} |
|
/// <summary> |
|
/// Raise a warning |
|
/// </summary> |
|
public void Warning(string message) |
|
{ |
|
System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); |
|
error.ErrorText = message; |
|
error.IsWarning = true; |
|
this.Errors.Add(error); |
|
} |
|
/// <summary> |
|
/// Increase the indent |
|
/// </summary> |
|
public void PushIndent(string indent) |
|
{ |
|
if ((indent == null)) |
|
{ |
|
throw new global::System.ArgumentNullException("indent"); |
|
} |
|
this.currentIndentField = (this.currentIndentField + indent); |
|
this.indentLengths.Add(indent.Length); |
|
} |
|
/// <summary> |
|
/// Remove the last indent that was added with PushIndent |
|
/// </summary> |
|
public string PopIndent() |
|
{ |
|
string returnValue = ""; |
|
if ((this.indentLengths.Count > 0)) |
|
{ |
|
int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; |
|
this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); |
|
if ((indentLength > 0)) |
|
{ |
|
returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); |
|
this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); |
|
} |
|
} |
|
return returnValue; |
|
} |
|
/// <summary> |
|
/// Remove any indentation |
|
/// </summary> |
|
public void ClearIndent() |
|
{ |
|
this.indentLengths.Clear(); |
|
this.currentIndentField = ""; |
|
} |
|
#endregion |
|
#region ToString Helpers |
|
/// <summary> |
|
/// Utility class to produce culture-oriented representation of an object as a string. |
|
/// </summary> |
|
public class ToStringInstanceHelper |
|
{ |
|
private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; |
|
/// <summary> |
|
/// Gets or sets format provider to be used by ToStringWithCulture method. |
|
/// </summary> |
|
public System.IFormatProvider FormatProvider |
|
{ |
|
get |
|
{ |
|
return this.formatProviderField ; |
|
} |
|
set |
|
{ |
|
if ((value != null)) |
|
{ |
|
this.formatProviderField = value; |
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// This is called from the compile/run appdomain to convert objects within an expression block to a string |
|
/// </summary> |
|
public string ToStringWithCulture(object objectToConvert) |
|
{ |
|
if ((objectToConvert == null)) |
|
{ |
|
throw new global::System.ArgumentNullException("objectToConvert"); |
|
} |
|
System.Type t = objectToConvert.GetType(); |
|
System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { |
|
typeof(System.IFormatProvider)}); |
|
if ((method == null)) |
|
{ |
|
return objectToConvert.ToString(); |
|
} |
|
else |
|
{ |
|
return ((string)(method.Invoke(objectToConvert, new object[] { |
|
this.formatProviderField }))); |
|
} |
|
} |
|
} |
|
private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); |
|
public ToStringInstanceHelper ToStringHelper |
|
{ |
|
get |
|
{ |
|
return this.toStringHelperField; |
|
} |
|
} |
|
#endregion |
|
} |
|
#endregion |
|
}
|
|
|