Browse Source

[generator] Correctly handle fields that are fixed-length arrays

pull/1/head
Alex Corrado 14 years ago
parent
commit
7662dd4430
  1. 7
      src/generator/Generator.cs
  2. 290
      src/generator/Templates/CSharp/CSharpClass.cs
  3. 20
      src/generator/Templates/CSharp/CSharpClass.tt

7
src/generator/Generator.cs

@ -471,7 +471,12 @@ public class Generator {
case "Typedef": case "Typedef":
return GetType (GetTypeNode (n), modifiers); return GetType (GetTypeNode (n), modifiers);
case "ArrayType": case "ArrayType":
return GetType (GetTypeNode (n), modifiers.Modify (CppModifiers.Array)); CppModifiers mod = null;
if (n.Attributes ["max"] != null && n.Attributes ["min"] != null)
mod = new CppModifiers.ArrayModifier (int.Parse (n.Attributes ["max"].TrimEnd ('u')) - int.Parse (n.Attributes ["min"].TrimEnd ('u')) + 1);
else
mod = CppModifiers.Array;
return GetType (GetTypeNode (n), modifiers.Modify (mod));
case "PointerType": case "PointerType":
return GetType (GetTypeNode (n), modifiers.Modify (CppModifiers.Pointer)); return GetType (GetTypeNode (n), modifiers.Modify (CppModifiers.Pointer));
case "ReferenceType": case "ReferenceType":

290
src/generator/Templates/CSharp/CSharpClass.cs

@ -1,4 +1,4 @@
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
// <autogenerated> // <autogenerated>
// This code was generated by a tool. // This code was generated by a tool.
// Mono Runtime Version: 4.0.30319.1 // Mono Runtime Version: 4.0.30319.1
@ -19,7 +19,7 @@ namespace Templates {
public partial class CSharpClass : ClassBase { public partial class CSharpClass : ClassBase {
#line 312 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 320 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
private void WriteMethodHeader (Method method, string layoutClass, bool isNonPrimaryOverride, bool @protected) private void WriteMethodHeader (Method method, string layoutClass, bool isNonPrimaryOverride, bool @protected)
{ {
@ -367,7 +367,7 @@ if (!Nested) {
Write (");\n"); Write (");\n");
} }
foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) {
WriteLine ("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic), CSharpLanguage.SafeIdentifier (field.Name)); WriteLine ("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Interface | Context.Generic), CSharpLanguage.SafeIdentifier (field.Name));
} }
PopIndent (); PopIndent ();
@ -387,7 +387,7 @@ if (!Nested) {
#line hidden #line hidden
#line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\tprivate struct "); this.Write("\t\tpublic unsafe struct ");
#line default #line default
#line hidden #line hidden
@ -405,60 +405,34 @@ if (!Nested) {
#line hidden #line hidden
#line 80 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 80 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
foreach (var field in Class.Fields) { PushIndent ("\t\t\t");
foreach (var field in Class.Fields) {
#line default var array = field.Type.Modifiers.OfType<CppModifiers.ArrayModifier> ().SingleOrDefault (); //FIXME: Handle more than one?
#line hidden if (array != null && array.Size.HasValue) {
var elementType = CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic).TrimEnd ('[',']');
#line 81 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" WriteLine ("public fixed {0} {1} [{2}];", elementType, CSharpLanguage.SafeIdentifier (field.Name), array.Size.Value);
this.Write("\t\t\tpublic "); } else {
WriteLine ("public {0} {1};", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic), CSharpLanguage.SafeIdentifier (field.Name));
#line default }
#line hidden }
PopIndent ();
#line 81 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic) ));
#line default
#line hidden
#line 81 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" ");
#line default
#line hidden
#line 81 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( CSharpLanguage.SafeIdentifier (field.Name) ));
#line default
#line hidden
#line 81 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(";\n");
#line default
#line hidden
#line 82 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
}
#line default #line default
#line hidden #line hidden
#line 83 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 91 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t}\n\n"); this.Write("\t\t}\n\n");
#line default #line default
#line hidden #line hidden
#line 85 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 93 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Native fields */ /* Native fields */
#line default #line default
#line hidden #line hidden
#line 86 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 94 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
PushIndent ("\t\t"); PushIndent ("\t\t");
foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) {
var fieldName = CSharpLanguage.SafeIdentifier (field.Name); var fieldName = CSharpLanguage.SafeIdentifier (field.Name);
@ -467,55 +441,55 @@ if (!Nested) {
#line default #line default
#line hidden #line hidden
#line 90 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 98 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t\tget {\n\t\t\t\treturn impl."); this.Write("\t\t\tget {\n\t\t\t\treturn impl.");
#line default #line default
#line hidden #line hidden
#line 91 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 99 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( fieldName )); this.Write(this.ToStringHelper.ToStringWithCulture( fieldName ));
#line default #line default
#line hidden #line hidden
#line 91 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 99 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" [Native];\n\t\t\t}\n\t\t\tset {\n\t\t\t\timpl."); this.Write(" [Native];\n\t\t\t}\n\t\t\tset {\n\t\t\t\timpl.");
#line default #line default
#line hidden #line hidden
#line 94 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 102 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( fieldName )); this.Write(this.ToStringHelper.ToStringWithCulture( fieldName ));
#line default #line default
#line hidden #line hidden
#line 94 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 102 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" [Native] = value;\n\t\t\t}\n\t\t}\n"); this.Write(" [Native] = value;\n\t\t\t}\n\t\t}\n");
#line default #line default
#line hidden #line hidden
#line 97 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 105 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
} PopIndent(); } PopIndent();
#line default #line default
#line hidden #line hidden
#line 98 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 106 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n"); this.Write("\n");
#line default #line default
#line hidden #line hidden
#line 99 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 107 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Nested classes */ /* Nested classes */
#line default #line default
#line hidden #line hidden
#line 100 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 108 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
foreach (var klass in Class.NestedClasses) { foreach (var klass in Class.NestedClasses) {
var nestedTempl = new CSharpClass { var nestedTempl = new CSharpClass {
Generator = this.Generator, Generator = this.Generator,
@ -528,19 +502,19 @@ if (!Nested) {
#line default #line default
#line hidden #line hidden
#line 108 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 116 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n"); this.Write("\n");
#line default #line default
#line hidden #line hidden
#line 109 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 117 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Nested enums */ /* Nested enums */
#line default #line default
#line hidden #line hidden
#line 110 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 118 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
foreach (var @enum in Class.NestedEnums) { foreach (var @enum in Class.NestedEnums) {
Generator.EnumTemplate.Generator = Generator; Generator.EnumTemplate.Generator = Generator;
Generator.EnumTemplate.Enum = @enum; Generator.EnumTemplate.Enum = @enum;
@ -551,103 +525,103 @@ if (!Nested) {
#line default #line default
#line hidden #line hidden
#line 116 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 124 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n"); this.Write("\n");
#line default #line default
#line hidden #line hidden
#line 117 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 125 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Subclass constructor */ /* Subclass constructor */
#line default #line default
#line hidden #line hidden
#line 118 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 126 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\tpublic "); this.Write("\t\tpublic ");
#line default #line default
#line hidden #line hidden
#line 118 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 126 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 118 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 126 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" (CppTypeInfo subClass)\n\t\t"); this.Write(" (CppTypeInfo subClass)\n\t\t");
#line default #line default
#line hidden #line hidden
#line 119 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 127 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass )); this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass ));
#line default #line default
#line hidden #line hidden
#line 119 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 127 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n\t\t\tsubClass.AddBase (impl.TypeInfo);\n\t\t}\n\n"); this.Write("\n\t\t\tsubClass.AddBase (impl.TypeInfo);\n\t\t}\n\n");
#line default #line default
#line hidden #line hidden
#line 123 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 131 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Native constructor */ /* Native constructor */
#line default #line default
#line hidden #line hidden
#line 124 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\tpublic "); this.Write("\t\tpublic ");
#line default #line default
#line hidden #line hidden
#line 124 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 124 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" (CppInstancePtr native)\n\t\t"); this.Write(" (CppInstancePtr native)\n\t\t");
#line default #line default
#line hidden #line hidden
#line 125 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 133 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass )); this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass ));
#line default #line default
#line hidden #line hidden
#line 125 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 133 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n\t\t\tNative = native;\n\t\t"); this.Write("\n\t\t\tNative = native;\n\t\t");
#line default #line default
#line hidden #line hidden
#line 127 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 135 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( initBases )); this.Write(this.ToStringHelper.ToStringWithCulture( initBases ));
#line default #line default
#line hidden #line hidden
#line 127 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 135 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n\n"); this.Write("\n\n");
#line default #line default
#line hidden #line hidden
#line 129 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 137 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Wrapper methods */ /* Wrapper methods */
#line default #line default
#line hidden #line hidden
#line 130 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
PushIndent ("\t\t"); PushIndent ("\t\t");
foreach (var method in Class.Methods.Where (m => m.GenWrapperMethod)) { foreach (var method in Class.Methods.Where (m => m.GenWrapperMethod)) {
var methodName = CSharpLanguage.SafeIdentifier (method.Name); var methodName = CSharpLanguage.SafeIdentifier (method.Name);
@ -680,19 +654,19 @@ if (!Nested) {
#line default #line default
#line hidden #line hidden
#line 158 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 166 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n"); this.Write("\n");
#line default #line default
#line hidden #line hidden
#line 159 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 167 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Wrapper properties */ /* Wrapper properties */
#line default #line default
#line hidden #line hidden
#line 160 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 168 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
PushIndent ("\t\t"); PushIndent ("\t\t");
foreach (var prop in Class.Properties) { foreach (var prop in Class.Properties) {
var propName = CSharpLanguage.SafeIdentifier (prop.Name); var propName = CSharpLanguage.SafeIdentifier (prop.Name);
@ -741,218 +715,218 @@ if (!Nested) {
#line default #line default
#line hidden #line hidden
#line 204 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 212 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n\t\tpartial void BeforeDestruct ();\n\t\tpartial void AfterDestruct ();\n\n\t\tpublic "); this.Write("\n\t\tpartial void BeforeDestruct ();\n\t\tpartial void AfterDestruct ();\n\n\t\tpublic ");
#line default #line default
#line hidden #line hidden
#line 208 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 216 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( hasBase? "override" : "virtual" )); this.Write(this.ToStringHelper.ToStringWithCulture( hasBase? "override" : "virtual" ));
#line default #line default
#line hidden #line hidden
#line 208 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 216 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" void Dispose ()\n\t\t{\n\t\t\tBeforeDestruct ();\n"); this.Write(" void Dispose ()\n\t\t{\n\t\t\tBeforeDestruct ();\n");
#line default #line default
#line hidden #line hidden
#line 211 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 219 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
if (Class.Methods.Any (m => m.IsDestructor && !m.IsArtificial)) { if (Class.Methods.Any (m => m.IsDestructor && !m.IsArtificial)) {
#line default #line default
#line hidden #line hidden
#line 212 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 220 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t\timpl.Destruct (Native);\n"); this.Write("\t\t\timpl.Destruct (Native);\n");
#line default #line default
#line hidden #line hidden
#line 213 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 221 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
} }
#line default #line default
#line hidden #line hidden
#line 214 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 222 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t\tNative.Dispose ();\n\t\t\tAfterDestruct ();\n\t\t}\n\n\t\tprivate void __cxxi_LayoutClass ()\n\t\t{\n"); this.Write("\t\t\tNative.Dispose ();\n\t\t\tAfterDestruct ();\n\t\t}\n\n\t\tprivate void __cxxi_LayoutClass ()\n\t\t{\n");
#line default #line default
#line hidden #line hidden
#line 220 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 228 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
foreach (var npBase in Class.BaseClasses.Skip (1)) { foreach (var npBase in Class.BaseClasses.Skip (1)) {
#line default #line default
#line hidden #line hidden
#line 221 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 229 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t\tnew "); this.Write("\t\t\tnew ");
#line default #line default
#line hidden #line hidden
#line 221 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 229 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 221 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 229 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" (impl.TypeInfo);\n"); this.Write(" (impl.TypeInfo);\n");
#line default #line default
#line hidden #line hidden
#line 222 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 230 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
} }
#line default #line default
#line hidden #line hidden
#line 223 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 231 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t\timpl.TypeInfo.CompleteType ();\n\t\t}\n\n"); this.Write("\t\t\timpl.TypeInfo.CompleteType ();\n\t\t}\n\n");
#line default #line default
#line hidden #line hidden
#line 226 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 234 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Make this wrapper castable to non-primary bases */ /* Make this wrapper castable to non-primary bases */
foreach (var npBase in Class.BaseClasses.Skip (1)) { foreach (var npBase in Class.BaseClasses.Skip (1)) {
#line default #line default
#line hidden #line hidden
#line 228 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 236 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n#region Non-primary base class implementation for "); this.Write("\n#region Non-primary base class implementation for ");
#line default #line default
#line hidden #line hidden
#line 229 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 237 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 229 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 237 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n\t\tprivate class "); this.Write("\n\t\tprivate class ");
#line default #line default
#line hidden #line hidden
#line 230 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 238 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 230 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 238 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" : "); this.Write(" : ");
#line default #line default
#line hidden #line hidden
#line 230 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 238 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 230 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 238 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" {\n\t\t\tpublic "); this.Write(" {\n\t\t\tpublic ");
#line default #line default
#line hidden #line hidden
#line 231 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 239 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 231 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 239 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" instance;\n\t\t\tpublic "); this.Write(" instance;\n\t\t\tpublic ");
#line default #line default
#line hidden #line hidden
#line 232 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 240 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 232 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 240 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" ("); this.Write(" (");
#line default #line default
#line hidden #line hidden
#line 232 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 240 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 232 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 240 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" instance)\n\t\t\t\t: base ("); this.Write(" instance)\n\t\t\t\t: base (");
#line default #line default
#line hidden #line hidden
#line 233 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 241 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 233 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 241 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(".impl.TypeInfo.Cast (instance, typeof ("); this.Write(".impl.TypeInfo.Cast (instance, typeof (");
#line default #line default
#line hidden #line hidden
#line 233 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 241 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 233 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 241 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(")))\n\t\t\t{\n\t\t\t\t"); this.Write(")))\n\t\t\t{\n\t\t\t\t");
#line default #line default
#line hidden #line hidden
#line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(".impl.TypeInfo.InitNonPrimaryBase (this, instance, typeof ("); this.Write(".impl.TypeInfo.InitNonPrimaryBase (this, instance, typeof (");
#line default #line default
#line hidden #line hidden
#line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("));\n\t\t\t\tthis.instance = instance;\n\t\t\t}\n\n"); this.Write("));\n\t\t\t\tthis.instance = instance;\n\t\t\t}\n\n");
#line default #line default
#line hidden #line hidden
#line 239 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
PushIndent ("\t\t\t"); PushIndent ("\t\t\t");
foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) { foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) {
@ -982,163 +956,163 @@ foreach (var npBase in Class.BaseClasses.Skip (1)) {
#line default #line default
#line hidden #line hidden
#line 264 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 272 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t}\n\t\tprivate "); this.Write("\t\t}\n\t\tprivate ");
#line default #line default
#line hidden #line hidden
#line 265 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 273 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 265 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 273 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("__"); this.Write("__");
#line default #line default
#line hidden #line hidden
#line 265 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 273 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 265 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 273 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" __cxxi_"); this.Write(" __cxxi_");
#line default #line default
#line hidden #line hidden
#line 265 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 273 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 265 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 273 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(";\n\t\tpublic "); this.Write(";\n\t\tpublic ");
#line default #line default
#line hidden #line hidden
#line 266 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 266 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 266 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 266 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" { get { return __cxxi_"); this.Write(" { get { return __cxxi_");
#line default #line default
#line hidden #line hidden
#line 266 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 266 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("; } }\n\t\tpublic static implicit operator "); this.Write("; } }\n\t\tpublic static implicit operator ");
#line default #line default
#line hidden #line hidden
#line 267 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 275 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 267 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 275 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("("); this.Write("(");
#line default #line default
#line hidden #line hidden
#line 267 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 275 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 267 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 275 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" subClass)\n\t\t{\n\t\t\treturn subClass."); this.Write(" subClass)\n\t\t{\n\t\t\treturn subClass.");
#line default #line default
#line hidden #line hidden
#line 269 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 277 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 269 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 277 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(";\n\t\t}\n\t\tpublic static explicit operator "); this.Write(";\n\t\t}\n\t\tpublic static explicit operator ");
#line default #line default
#line hidden #line hidden
#line 271 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper ));
#line default #line default
#line hidden #line hidden
#line 271 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("("); this.Write("(");
#line default #line default
#line hidden #line hidden
#line 271 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 271 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" baseClass)\n\t\t{\n\t\t\tif (baseClass == null) return null;\n\t\t\tvar obj = baseClass as "); this.Write(" baseClass)\n\t\t{\n\t\t\tif (baseClass == null) return null;\n\t\t\tvar obj = baseClass as ");
#line default #line default
#line hidden #line hidden
#line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 282 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 274 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 282 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(";\n\t\t\tif (obj == null) throw new InvalidCastException ();\n\t\t\treturn obj.instance;\n\t\t}\n\n"); this.Write(";\n\t\t\tif (obj == null) throw new InvalidCastException ();\n\t\t\treturn obj.instance;\n\t\t}\n\n");
#line default #line default
#line hidden #line hidden
#line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 287 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
/* Add virtual methods of non-primary bases to this class proper so they can be overridden */ /* Add virtual methods of non-primary bases to this class proper so they can be overridden */
#line default #line default
#line hidden #line hidden
#line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 288 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
PushIndent ("\t\t"); PushIndent ("\t\t");
foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) { foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) {
@ -1162,115 +1136,115 @@ if (overrideInitBases || Class.BaseClasses.Count > 1) {
#line default #line default
#line hidden #line hidden
#line 299 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 307 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\tprotected "); this.Write("\t\tprotected ");
#line default #line default
#line hidden #line hidden
#line 299 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 307 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases ? "override" : "virtual" )); this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases ? "override" : "virtual" ));
#line default #line default
#line hidden #line hidden
#line 299 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 307 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" void __cxxi_InitBases ()\n\t\t{\n\t\t\t"); this.Write(" void __cxxi_InitBases ()\n\t\t{\n\t\t\t");
#line default #line default
#line hidden #line hidden
#line 301 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 309 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases? "base.__cxxi_InitBases ();" : "" )); this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases? "base.__cxxi_InitBases ();" : "" ));
#line default #line default
#line hidden #line hidden
#line 301 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 309 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n"); this.Write("\n");
#line default #line default
#line hidden #line hidden
#line 302 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 310 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
foreach (var npBase in Class.BaseClasses.Skip (1)) { foreach (var npBase in Class.BaseClasses.Skip (1)) {
#line default #line default
#line hidden #line hidden
#line 303 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 311 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t\t__cxxi_"); this.Write("\t\t\t__cxxi_");
#line default #line default
#line hidden #line hidden
#line 303 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 311 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 303 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 311 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" = new "); this.Write(" = new ");
#line default #line default
#line hidden #line hidden
#line 303 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 311 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name ));
#line default #line default
#line hidden #line hidden
#line 303 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 311 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write(" (this);\n"); this.Write(" (this);\n");
#line default #line default
#line hidden #line hidden
#line 304 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 312 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
} }
#line default #line default
#line hidden #line hidden
#line 305 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t\t}\n"); this.Write("\t\t}\n");
#line default #line default
#line hidden #line hidden
#line 306 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 314 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
} }
#line default #line default
#line hidden #line hidden
#line 307 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 315 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\t}\n"); this.Write("\t}\n");
#line default #line default
#line hidden #line hidden
#line 308 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 316 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
if (!Nested) { if (!Nested) {
#line default #line default
#line hidden #line hidden
#line 309 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("}\n"); this.Write("}\n");
#line default #line default
#line hidden #line hidden
#line 310 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 318 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
} }
#line default #line default
#line hidden #line hidden
#line 311 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" #line 319 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt"
this.Write("\n"); this.Write("\n");
#line default #line default

20
src/generator/Templates/CSharp/CSharpClass.tt

@ -1,4 +1,4 @@
<#@ template language="C#" inherits="ClassBase" #> <#@ template language="C#" inherits="ClassBase" #>
<#@ import namespace="System.IO" #> <#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #> <#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #> <#@ import namespace="System.Collections.Generic" #>
@ -71,15 +71,23 @@ namespace <#= @namespace #> {
Write (");\n"); Write (");\n");
} }
foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) {
WriteLine ("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic), CSharpLanguage.SafeIdentifier (field.Name)); WriteLine ("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Interface | Context.Generic), CSharpLanguage.SafeIdentifier (field.Name));
} }
PopIndent (); #> PopIndent (); #>
} }
<# /* Native layout */ #> <# /* Native layout */ #>
private struct <#= layout #> { public unsafe struct <#= layout #> {
<# foreach (var field in Class.Fields) { #> <# PushIndent ("\t\t\t");
public <#= CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic) #> <#= CSharpLanguage.SafeIdentifier (field.Name) #>; foreach (var field in Class.Fields) {
<# } #> var array = field.Type.Modifiers.OfType<CppModifiers.ArrayModifier> ().SingleOrDefault (); //FIXME: Handle more than one?
if (array != null && array.Size.HasValue) {
var elementType = CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic).TrimEnd ('[',']');
WriteLine ("public fixed {0} {1} [{2}];", elementType, CSharpLanguage.SafeIdentifier (field.Name), array.Size.Value);
} else {
WriteLine ("public {0} {1};", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic), CSharpLanguage.SafeIdentifier (field.Name));
}
}
PopIndent (); #>
} }
<# /* Native fields */ #> <# /* Native fields */ #>

Loading…
Cancel
Save