public override string TransformText() { this.GenerationEnvironment = null; #line 6 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" var hasBase = Class.BaseClasses.Count > 0; var wrapper = Class.Name; var iface = "I" + Class.Name; var layout = "_" + Class.Name; var layoutClass = (hasBase? "\t: base (impl.TypeInfo)\n\t\t{" : "{") + "\n\t\t\t__cxxi_LayoutClass ();"; var overrideInitBases = Generator.CheckPrimaryBases (Class, c => c.BaseClasses.Count > 1); var initBases = ((overrideInitBases || Class.BaseClasses.Count > 1) ? "\t__cxxi_InitBases ();\n\t\t}" : "}"); var @namespace = Generator.Lib.BaseNamespace + (Class.ParentNamespace != null? "." + string.Join (".", Class.ParentNamespace.FullyQualifiedName) : ""); if (!Nested) { #line default #line hidden #line 18 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("// -------------------------------------------------------------------------\n// Managed wrapper for "); #line default #line hidden #line 19 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Class.Name )); #line default #line hidden #line 19 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n// Generated from "); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Path.GetFileName (Generator.InputFileName) )); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" on "); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( DateTime.Now )); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n//\n// This file was auto generated. Do not edit.\n// -------------------------------------------------------------------------\n\nusing System;\nusing Mono.Cxxi;\n\nnamespace "); #line default #line hidden #line 28 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( @namespace )); #line default #line hidden #line 28 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n"); #line default #line hidden #line 29 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } /* if !Nested */ #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\tpublic partial class "); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" : "); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( GetBaseString () )); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n\n\t\tprivate static readonly "); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( iface )); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" impl = Libs."); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Generator.Lib.BaseName )); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(".GetClass<"); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( iface + "," + layout + "," + wrapper )); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("> (\""); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Class.Name )); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\");\n"); #line default #line hidden #line 33 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" if (!hasBase) { #line default #line hidden #line 34 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic CppInstancePtr Native { get; protected set; }\n"); #line default #line hidden #line 35 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 36 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 37 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Interface */ #line default #line hidden #line 38 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t[MangleAs (\""); #line default #line hidden #line 38 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Class.MangleType.ToString () )); #line default #line hidden #line 38 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\")]\n\t\tpublic partial interface "); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( iface )); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" : ICppClassOverridable<"); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("> {\n"); #line default #line hidden #line 40 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t\t"); foreach (var method in Class.Methods) { Write (CurrentIndent); if (method.IsVirtual) Write ("[Virtual] "); if (method.IsStatic) Write ("[Static] "); if (method.IsArtificial) Write ("[Artificial] "); if (method.IsInline) Write ("[Inline] "); if (method.IsConst) Write ("[Const] "); if (method.IsConstructor) Write ("[Constructor] "); if (method.IsDestructor) Write ("[Destructor] "); if (method.IsCopyCtor) Write ("[CopyConstructor] "); if (Generator.IsByVal (method.ReturnType)) { Write ("[return: ByVal] "); } if (method.IsConstructor) Write ("CppInstancePtr"); else Write (CSharpLanguage.TypeName (Generator.CppTypeToManaged (method.ReturnType), Context.Interface | Context.Return)); Write (" "); Write (CSharpLanguage.SafeIdentifier (method.Name)); Write (" ("); if (!method.IsStatic) { Write ("CppInstancePtr @this"); if (method.Parameters.Count != 0) Write (", "); } WriteParameters (method.Parameters, true, !method.IsVirtual); Write (");\n"); } foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { WriteLine ("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Interface | Context.Generic), CSharpLanguage.SafeIdentifier (field.Name)); } PopIndent (); #line default #line hidden #line 77 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n"); #line default #line hidden #line 78 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Native layout */ #line default #line hidden #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic unsafe struct "); #line default #line hidden #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( layout )); #line default #line hidden #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n"); #line default #line hidden #line 80 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t\t"); foreach (var field in Class.Fields) { // handle byval fields var fieldType = CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic); if (Generator.GetFilterOrDefault (field.Type).ImplType == ImplementationType.@class && Generator.IsByVal (field.Type)) fieldType = fieldType + "._" + fieldType; // handle fixed-length arrays var array = field.Type.Modifiers.OfType<CppModifiers.ArrayModifier> ().SingleOrDefault (); //FIXME: Handle more than one? if (array != null && array.Size.HasValue) { fieldType = fieldType.TrimEnd ('[',']'); WriteLine ("public fixed {0} {1} [{2}];", fieldType, CSharpLanguage.SafeIdentifier (field.Name), array.Size.Value); } else { WriteLine ("public {0} {1};", fieldType, CSharpLanguage.SafeIdentifier (field.Name)); } } PopIndent (); #line default #line hidden #line 97 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n\n"); #line default #line hidden #line 99 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Native fields */ #line default #line hidden #line 100 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t"); foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { var fieldName = CSharpLanguage.SafeIdentifier (field.Name); WriteLine ("{0} {1} {2} {{", field.Access, CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Wrapper | Context.Return), fieldName); #line default #line hidden #line 104 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\tget {\n\t\t\t\treturn impl."); #line default #line hidden #line 105 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( fieldName )); #line default #line hidden #line 105 "/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."); #line default #line hidden #line 108 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( fieldName )); #line default #line hidden #line 108 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" [Native] = value;\n\t\t\t}\n\t\t}\n"); #line default #line hidden #line 111 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } PopIndent(); #line default #line hidden #line 112 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 113 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Nested classes */ #line default #line hidden #line 114 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var klass in Class.NestedClasses) { var nestedTempl = new CSharpClass { Generator = this.Generator, Class = klass, Nested = true }; Write (nestedTempl.TransformText ()); } #line default #line hidden #line 122 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 123 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Nested enums */ #line default #line hidden #line 124 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var @enum in Class.NestedEnums) { Generator.EnumTemplate.Generator = Generator; Generator.EnumTemplate.Enum = @enum; Generator.EnumTemplate.Nested = true; Write (Generator.EnumTemplate.TransformText ()); } #line default #line hidden #line 130 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 131 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Subclass constructor */ #line default #line hidden #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic "); #line default #line hidden #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (CppTypeInfo subClass)\n\t\t"); #line default #line hidden #line 133 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass )); #line default #line hidden #line 133 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\t\t\tsubClass.AddBase (impl.TypeInfo);\n\t\t}\n\n"); #line default #line hidden #line 137 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Native constructor */ #line default #line hidden #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic "); #line default #line hidden #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (CppInstancePtr native)\n\t\t"); #line default #line hidden #line 139 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass )); #line default #line hidden #line 139 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\t\t\tNative = native;\n\t\t"); #line default #line hidden #line 141 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( initBases )); #line default #line hidden #line 141 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\n"); #line default #line hidden #line 143 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Wrapper methods */ #line default #line hidden #line 144 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t"); foreach (var method in Class.Methods.Where (m => m.GenWrapperMethod)) { var methodName = CSharpLanguage.SafeIdentifier (method.Name); WriteMethodHeader (method, layoutClass, false, false); if (method.IsConstructor) Write ("Native = "); Write ("impl.{0} (", methodName); if (!method.IsStatic) { if (method.IsConstructor) Write ("impl.Alloc (this)"); else Write ("Native"); if (method.Parameters.Count != 0) Write (", "); } WriteParameters (method.Parameters, false, false); Write (");\n"); PopIndent (); if (method.IsConstructor) WriteLine (initBases); else WriteLine ("}"); } PopIndent (); #line default #line hidden #line 172 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 173 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Wrapper properties */ #line default #line hidden #line 174 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t"); foreach (var prop in Class.Properties) { var propName = CSharpLanguage.SafeIdentifier (prop.Name); var type = CSharpLanguage.TypeName (Generator.CppTypeToManaged (prop.Type), Context.Wrapper | Context.Return); Write (CurrentIndent + "public "); if ((prop.GetMethod == null || prop.GetMethod.IsVirtual) && (prop.SetMethod == null || prop.SetMethod.IsVirtual)) Write ("virtual "); Write (type); Write (" "); Write (propName); Write (" {\n"); PushIndent ("\t"); Write (CurrentIndent); if (prop.GetMethod != null) { if (prop.GetMethod.IsVirtual) Write ("[OverrideNative (\"{0}\")] ", prop.GetMethod.Name); Write ("get {\n"); PushIndent ("\t"); WriteLine ("return impl.{0} (Native);", prop.GetMethod.Name); PopIndent (); WriteLine ("}"); } if (prop.SetMethod != null) { if (prop.SetMethod.IsVirtual) Write ("[OverrideNative (\"{0}\")] ", prop.SetMethod.Name); WriteLine ("set {"); PushIndent ("\t"); WriteLine ("impl.{0} (Native, value);", prop.SetMethod.Name); PopIndent (); WriteLine ("}"); } PopIndent (); WriteLine ("}\n"); } PopIndent (); #line default #line hidden #line 218 "/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 "); #line default #line hidden #line 222 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( hasBase? "override" : "virtual" )); #line default #line hidden #line 222 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" void Dispose ()\n\t\t{\n\t\t\tBeforeDestruct ();\n"); #line default #line hidden #line 225 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" if (Class.Methods.Any (m => m.IsDestructor && !m.IsArtificial)) { #line default #line hidden #line 226 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\timpl.Destruct (Native);\n"); #line default #line hidden #line 227 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 228 "/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"); #line default #line hidden #line 234 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var npBase in Class.BaseClasses.Skip (1)) { #line default #line hidden #line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\tnew "); #line default #line hidden #line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (impl.TypeInfo);\n"); #line default #line hidden #line 236 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 237 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\timpl.TypeInfo.CompleteType ();\n\t\t}\n\n"); #line default #line hidden #line 240 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Make this wrapper castable to non-primary bases */ foreach (var npBase in Class.BaseClasses.Skip (1)) { #line default #line hidden #line 242 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n#region Non-primary base class implementation for "); #line default #line hidden #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\t\tprivate class "); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" : "); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n\t\t\tpublic "); #line default #line hidden #line 245 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 245 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" instance;\n\t\t\tpublic "); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" ("); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" instance)\n\t\t\t\t: base ("); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(".impl.TypeInfo.Cast (instance, typeof ("); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(")))\n\t\t\t{\n\t\t\t\t"); #line default #line hidden #line 249 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 249 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(".impl.TypeInfo.InitNonPrimaryBase (this, instance, typeof ("); #line default #line hidden #line 249 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 249 "/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"); #line default #line hidden #line 253 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t\t"); foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) { if (!method.GenWrapperMethod || Class.Methods.Any (m => m.Node.CheckValue ("overrides", method.Node.Id))) continue; /* this is the managed override that has to call the subclass's method */ WriteMethodHeader (method, null, true, false); Write ("instance.{0} (", npBase.Name + "__" + method.FormattedName); WriteParameters (method.Parameters, false, false); PopIndent (); Write (");\n{0}}}\n\n", CurrentIndent); /* this is the method that calls the base implementation that the subclass will use */ WriteMethodHeader (method, npBase.Name + "__" + method.FormattedName, true, false); Write ("base.{0} (", method.FormattedName); WriteParameters (method.Parameters, false, false); PopIndent (); Write (");\n{0}}}\n\n", CurrentIndent); } PopIndent (); #line default #line hidden #line 278 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n\t\tprivate "); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("__"); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" __cxxi_"); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(";\n\t\tpublic "); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" "); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" { get { return __cxxi_"); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("; } }\n\t\tpublic static implicit operator "); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("("); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" subClass)\n\t\t{\n\t\t\treturn subClass."); #line default #line hidden #line 283 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 283 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(";\n\t\t}\n\t\tpublic static explicit operator "); #line default #line hidden #line 285 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 285 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("("); #line default #line hidden #line 285 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 285 "/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 "); #line default #line hidden #line 288 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 288 "/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"); #line default #line hidden #line 293 "/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 */ #line default #line hidden #line 294 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent ("\t\t"); foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) { if (!method.GenWrapperMethod || Class.Methods.Any (m => m.Node.CheckValue ("overrides", method.Node.Id))) continue; WriteMethodHeader (method, npBase.Name + "__" + method.FormattedName, true, true); Write ("{0}.{1} (", "__cxxi_" + npBase.Name, npBase.Name + "__" + method.FormattedName); WriteParameters (method.Parameters, false, false); PopIndent (); Write (");\n{0}}}\n\n", CurrentIndent); } PopIndent (); WriteLine ("#endregion"); } if (overrideInitBases || Class.BaseClasses.Count > 1) { #line default #line hidden #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tprotected "); #line default #line hidden #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases ? "override" : "virtual" )); #line default #line hidden #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" void __cxxi_InitBases ()\n\t\t{\n\t\t\t"); #line default #line hidden #line 315 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases? "base.__cxxi_InitBases ();" : "" )); #line default #line hidden #line 315 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 316 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var npBase in Class.BaseClasses.Skip (1)) { #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\t__cxxi_"); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" = new "); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (this);\n"); #line default #line hidden #line 318 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 319 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n"); #line default #line hidden #line 320 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 321 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t}\n"); #line default #line hidden #line 322 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" if (!Nested) { #line default #line hidden #line 323 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("}\n"); #line default #line hidden #line 324 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 325 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden return this.GenerationEnvironment.ToString(); }
public override string TransformText() { this.GenerationEnvironment = null; #line 6 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" var hasBase = Class.BaseClasses.Count > 0; var wrapper = Class.Name; var iface = "I" + Class.Name; var layout = "_" + Class.Name; var layoutClass = (hasBase? "\t: base (impl.TypeInfo)\n\t\t{" : "{") + "\n\t\t\t__cxxi_LayoutClass ();"; var overrideInitBases = Generator.CheckPrimaryBases(Class, c => c.BaseClasses.Count > 1); var initBases = ((overrideInitBases || Class.BaseClasses.Count > 1) ? "\t__cxxi_InitBases ();\n\t\t}" : "}"); var @namespace = Generator.Lib.BaseNamespace + (Class.ParentNamespace != null? "." + string.Join(".", Class.ParentNamespace.FullyQualifiedName) : ""); if (!Nested) { #line default #line hidden #line 18 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("// -------------------------------------------------------------------------\n// Managed wrapper for "); #line default #line hidden #line 19 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Class.Name)); #line default #line hidden #line 19 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n// Generated from "); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Path.GetFileName(Generator.InputFileName))); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" on "); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(DateTime.Now)); #line default #line hidden #line 20 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n//\n// This file was auto generated. Do not edit.\n// -------------------------------------------------------------------------\n\nusing System;\nusing Mono.Cxxi;\n\nnamespace "); #line default #line hidden #line 28 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(@namespace)); #line default #line hidden #line 28 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n"); #line default #line hidden #line 29 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } /* if !Nested */ #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\tpublic partial class "); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" : "); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(GetBaseString())); #line default #line hidden #line 30 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n\n\t\tprivate static readonly "); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(iface)); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" impl = Libs."); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Generator.Lib.BaseName)); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(".GetClass<"); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(iface + "," + layout + "," + wrapper)); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("> (\""); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Class.Name)); #line default #line hidden #line 32 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\");\n"); #line default #line hidden #line 33 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" if (!hasBase) { #line default #line hidden #line 34 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic CppInstancePtr Native { get; protected set; }\n"); #line default #line hidden #line 35 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 36 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 37 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Interface */ #line default #line hidden #line 38 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t[MangleAs (\""); #line default #line hidden #line 38 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Class.MangleType.ToString())); #line default #line hidden #line 38 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\")]\n\t\tpublic partial interface "); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(iface)); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" : ICppClassOverridable<"); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 39 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("> {\n"); #line default #line hidden #line 40 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t\t"); foreach (var method in Class.Methods) { Write(CurrentIndent); if (method.IsVirtual) { Write("[Virtual] "); } if (method.IsStatic) { Write("[Static] "); } if (method.IsArtificial) { Write("[Artificial] "); } if (method.IsInline) { Write("[Inline] "); } if (method.IsConst) { Write("[Const] "); } if (method.IsConstructor) { Write("[Constructor] "); } if (method.IsDestructor) { Write("[Destructor] "); } if (method.IsCopyCtor) { Write("[CopyConstructor] "); } if (Generator.IsByVal(method.ReturnType)) { Write("[return: ByVal] "); } if (method.IsConstructor) { Write("CppInstancePtr"); } else { Write(CSharpLanguage.TypeName(Generator.CppTypeToManaged(method.ReturnType), Context.Interface | Context.Return)); } Write(" "); Write(CSharpLanguage.SafeIdentifier(method.Name)); Write(" ("); if (!method.IsStatic) { Write("CppInstancePtr @this"); if (method.Parameters.Count != 0) { Write(", "); } } WriteParameters(method.Parameters, true, !method.IsVirtual); Write(");\n"); } foreach (var field in Class.Fields.Where(f => f.Access != Access.@private)) { WriteLine("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName(Generator.CppTypeToManaged(field.Type), Context.Interface | Context.Generic), CSharpLanguage.SafeIdentifier(field.Name)); } PopIndent(); #line default #line hidden #line 77 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n"); #line default #line hidden #line 78 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Native layout */ #line default #line hidden #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic unsafe struct "); #line default #line hidden #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(layout)); #line default #line hidden #line 79 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n"); #line default #line hidden #line 80 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t\t"); foreach (var field in Class.Fields) { // handle byval fields var fieldType = CSharpLanguage.TypeName(Generator.CppTypeToManaged(field.Type), Context.Generic); if (Generator.GetFilterOrDefault(field.Type).ImplType == ImplementationType.@class && Generator.IsByVal(field.Type)) { fieldType = fieldType + "._" + fieldType; } // handle fixed-length arrays var array = field.Type.Modifiers.OfType <CppModifiers.ArrayModifier> ().SingleOrDefault(); //FIXME: Handle more than one? if (array != null && array.Size.HasValue) { fieldType = fieldType.TrimEnd('[', ']'); WriteLine("public fixed {0} {1} [{2}];", fieldType, CSharpLanguage.SafeIdentifier(field.Name), array.Size.Value); } else { WriteLine("public {0} {1};", fieldType, CSharpLanguage.SafeIdentifier(field.Name)); } } PopIndent(); #line default #line hidden #line 97 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n\n"); #line default #line hidden #line 99 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Native fields */ #line default #line hidden #line 100 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t"); foreach (var field in Class.Fields.Where(f => f.Access != Access.@private)) { var fieldName = CSharpLanguage.SafeIdentifier(field.Name); WriteLine("{0} {1} {2} {{", field.Access, CSharpLanguage.TypeName(Generator.CppTypeToManaged(field.Type), Context.Wrapper | Context.Return), fieldName); #line default #line hidden #line 104 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\tget {\n\t\t\t\treturn impl."); #line default #line hidden #line 105 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(fieldName)); #line default #line hidden #line 105 "/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."); #line default #line hidden #line 108 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(fieldName)); #line default #line hidden #line 108 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" [Native] = value;\n\t\t\t}\n\t\t}\n"); #line default #line hidden #line 111 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } PopIndent(); #line default #line hidden #line 112 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 113 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Nested classes */ #line default #line hidden #line 114 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var klass in Class.NestedClasses) { var nestedTempl = new CSharpClass { Generator = this.Generator, Class = klass, Nested = true }; Write(nestedTempl.TransformText()); } #line default #line hidden #line 122 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 123 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Nested enums */ #line default #line hidden #line 124 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var @enum in Class.NestedEnums) { Generator.EnumTemplate.Generator = Generator; Generator.EnumTemplate.Enum = @enum; Generator.EnumTemplate.Nested = true; Write(Generator.EnumTemplate.TransformText()); } #line default #line hidden #line 130 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 131 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Subclass constructor */ #line default #line hidden #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic "); #line default #line hidden #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 132 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (CppTypeInfo subClass)\n\t\t"); #line default #line hidden #line 133 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(layoutClass)); #line default #line hidden #line 133 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\t\t\tsubClass.AddBase (impl.TypeInfo);\n\t\t}\n\n"); #line default #line hidden #line 137 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Native constructor */ #line default #line hidden #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tpublic "); #line default #line hidden #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 138 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (CppInstancePtr native)\n\t\t"); #line default #line hidden #line 139 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(layoutClass)); #line default #line hidden #line 139 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\t\t\tNative = native;\n\t\t"); #line default #line hidden #line 141 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(initBases)); #line default #line hidden #line 141 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\n"); #line default #line hidden #line 143 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Wrapper methods */ #line default #line hidden #line 144 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t"); foreach (var method in Class.Methods.Where(m => m.GenWrapperMethod)) { var methodName = CSharpLanguage.SafeIdentifier(method.Name); WriteMethodHeader(method, layoutClass, false, false); if (method.IsConstructor) { Write("Native = "); } Write("impl.{0} (", methodName); if (!method.IsStatic) { if (method.IsConstructor) { Write("impl.Alloc (this)"); } else { Write("Native"); } if (method.Parameters.Count != 0) { Write(", "); } } WriteParameters(method.Parameters, false, false); Write(");\n"); PopIndent(); if (method.IsConstructor) { WriteLine(initBases); } else { WriteLine("}"); } } PopIndent(); #line default #line hidden #line 172 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 173 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Wrapper properties */ #line default #line hidden #line 174 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t"); foreach (var prop in Class.Properties) { var propName = CSharpLanguage.SafeIdentifier(prop.Name); var type = CSharpLanguage.TypeName(Generator.CppTypeToManaged(prop.Type), Context.Wrapper | Context.Return); Write(CurrentIndent + "public "); if ((prop.GetMethod == null || prop.GetMethod.IsVirtual) && (prop.SetMethod == null || prop.SetMethod.IsVirtual)) { Write("virtual "); } Write(type); Write(" "); Write(propName); Write(" {\n"); PushIndent("\t"); Write(CurrentIndent); if (prop.GetMethod != null) { if (prop.GetMethod.IsVirtual) { Write("[OverrideNative (\"{0}\")] ", prop.GetMethod.Name); } Write("get {\n"); PushIndent("\t"); WriteLine("return impl.{0} (Native);", prop.GetMethod.Name); PopIndent(); WriteLine("}"); } if (prop.SetMethod != null) { if (prop.SetMethod.IsVirtual) { Write("[OverrideNative (\"{0}\")] ", prop.SetMethod.Name); } WriteLine("set {"); PushIndent("\t"); WriteLine("impl.{0} (Native, value);", prop.SetMethod.Name); PopIndent(); WriteLine("}"); } PopIndent(); WriteLine("}\n"); } PopIndent(); #line default #line hidden #line 218 "/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 "); #line default #line hidden #line 222 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(hasBase? "override" : "virtual")); #line default #line hidden #line 222 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" void Dispose ()\n\t\t{\n\t\t\tBeforeDestruct ();\n"); #line default #line hidden #line 225 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" if (Class.Methods.Any(m => m.IsDestructor && !m.IsArtificial)) { #line default #line hidden #line 226 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\timpl.Destruct (Native);\n"); #line default #line hidden #line 227 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 228 "/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"); #line default #line hidden #line 234 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var npBase in Class.BaseClasses.Skip(1)) { #line default #line hidden #line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\tnew "); #line default #line hidden #line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 235 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (impl.TypeInfo);\n"); #line default #line hidden #line 236 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 237 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\timpl.TypeInfo.CompleteType ();\n\t\t}\n\n"); #line default #line hidden #line 240 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" /* Make this wrapper castable to non-primary bases */ foreach (var npBase in Class.BaseClasses.Skip(1)) { #line default #line hidden #line 242 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n#region Non-primary base class implementation for "); #line default #line hidden #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 243 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n\t\tprivate class "); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper + "__" + npBase.Name)); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" : "); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 244 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" {\n\t\t\tpublic "); #line default #line hidden #line 245 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 245 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" instance;\n\t\t\tpublic "); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper + "__" + npBase.Name)); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" ("); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 246 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" instance)\n\t\t\t\t: base ("); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(".impl.TypeInfo.Cast (instance, typeof ("); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 247 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(")))\n\t\t\t{\n\t\t\t\t"); #line default #line hidden #line 249 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 249 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(".impl.TypeInfo.InitNonPrimaryBase (this, instance, typeof ("); #line default #line hidden #line 249 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 249 "/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"); #line default #line hidden #line 253 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t\t"); foreach (var method in npBase.Methods.Where(m => m.IsVirtual)) { if (!method.GenWrapperMethod || Class.Methods.Any(m => m.Node.CheckValue("overrides", method.Node.Id))) { continue; } /* this is the managed override that has to call the subclass's method */ WriteMethodHeader(method, null, true, false); Write("instance.{0} (", npBase.Name + "__" + method.FormattedName); WriteParameters(method.Parameters, false, false); PopIndent(); Write(");\n{0}}}\n\n", CurrentIndent); /* this is the method that calls the base implementation that the subclass will use */ WriteMethodHeader(method, npBase.Name + "__" + method.FormattedName, true, false); Write("base.{0} (", method.FormattedName); WriteParameters(method.Parameters, false, false); PopIndent(); Write(");\n{0}}}\n\n", CurrentIndent); } PopIndent(); #line default #line hidden #line 278 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n\t\tprivate "); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("__"); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" __cxxi_"); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 279 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(";\n\t\tpublic "); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" "); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" { get { return __cxxi_"); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 280 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("; } }\n\t\tpublic static implicit operator "); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("("); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 281 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" subClass)\n\t\t{\n\t\t\treturn subClass."); #line default #line hidden #line 283 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 283 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(";\n\t\t}\n\t\tpublic static explicit operator "); #line default #line hidden #line 285 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper)); #line default #line hidden #line 285 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("("); #line default #line hidden #line 285 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 285 "/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 "); #line default #line hidden #line 288 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper + "__" + npBase.Name)); #line default #line hidden #line 288 "/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"); #line default #line hidden #line 293 "/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 */ #line default #line hidden #line 294 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" PushIndent("\t\t"); foreach (var method in npBase.Methods.Where(m => m.IsVirtual)) { if (!method.GenWrapperMethod || Class.Methods.Any(m => m.Node.CheckValue("overrides", method.Node.Id))) { continue; } WriteMethodHeader(method, npBase.Name + "__" + method.FormattedName, true, true); Write("{0}.{1} (", "__cxxi_" + npBase.Name, npBase.Name + "__" + method.FormattedName); WriteParameters(method.Parameters, false, false); PopIndent(); Write(");\n{0}}}\n\n", CurrentIndent); } PopIndent(); WriteLine("#endregion"); } if (overrideInitBases || Class.BaseClasses.Count > 1) { #line default #line hidden #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\tprotected "); #line default #line hidden #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(overrideInitBases ? "override" : "virtual")); #line default #line hidden #line 313 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" void __cxxi_InitBases ()\n\t\t{\n\t\t\t"); #line default #line hidden #line 315 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(overrideInitBases? "base.__cxxi_InitBases ();" : "")); #line default #line hidden #line 315 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden #line 316 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" foreach (var npBase in Class.BaseClasses.Skip(1)) { #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t\t__cxxi_"); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(npBase.Name)); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" = new "); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture(wrapper + "__" + npBase.Name)); #line default #line hidden #line 317 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write(" (this);\n"); #line default #line hidden #line 318 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 319 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t\t}\n"); #line default #line hidden #line 320 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 321 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\t}\n"); #line default #line hidden #line 322 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" if (!Nested) { #line default #line hidden #line 323 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("}\n"); #line default #line hidden #line 324 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" } #line default #line hidden #line 325 "/Users/alex/OpenSource/cppinterop/src/generator/Templates/CSharp/CSharpClass.tt" this.Write("\n"); #line default #line hidden return(this.GenerationEnvironment.ToString()); }
public override string TransformText() { this.GenerationEnvironment = null; #line 6 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" var hasBase = Class.BaseClasses.Count > 0; var wrapper = Class.Name; var iface = "I" + Class.Name; var layout = "_" + Class.Name; var layoutClass = (hasBase? "\t: base (impl.TypeInfo)\n\t\t{" : "{") + "\n\t\t\t__cxxi_LayoutClass ();"; var overrideInitBases = Generator.CheckPrimaryBases (Class, c => c.BaseClasses.Count > 1); var initBases = ((overrideInitBases || Class.BaseClasses.Count > 1) ? "\t__cxxi_InitBases ();\n\t\t}" : "}"); var @namespace = Generator.Lib.BaseNamespace + (Class.ParentNamespace != null? "." + string.Join (".", Class.ParentNamespace.FullyQualifiedName) : ""); if (!Nested) { #line default #line hidden #line 18 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("// -------------------------------------------------------------------------\r\n// " + " Managed wrapper for "); #line default #line hidden #line 19 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Class.Name )); #line default #line hidden #line 19 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n// Generated from "); #line default #line hidden #line 20 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Path.GetFileName (Generator.InputFileName) )); #line default #line hidden #line 20 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" on "); #line default #line hidden #line 20 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( DateTime.Now )); #line default #line hidden #line 20 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n//\r\n// This file was auto generated. Do not edit.\r\n// ------------------------" + "-------------------------------------------------\r\n\r\nusing System;\r\nusing System" + ".Runtime.InteropServices;\r\nusing Mono.Cxxi;\r\n\r\nnamespace "); #line default #line hidden #line 29 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( @namespace )); #line default #line hidden #line 29 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" {\r\n"); #line default #line hidden #line 30 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } /* if !Nested */ #line default #line hidden #line 31 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" "); #line default #line hidden #line 31 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( GetTemplatesString () )); #line default #line hidden #line 31 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\t"); #line default #line hidden #line 32 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( GetVirtualBasesString () )); #line default #line hidden #line 32 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\tpublic partial class "); #line default #line hidden #line 33 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 33 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" : "); #line default #line hidden #line 33 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( GetBaseString () )); #line default #line hidden #line 33 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" {\r\n\r\n\t\tprivate static readonly "); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( iface )); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" impl = Libs."); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Generator.Lib.BaseName )); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(".GetClass<"); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( iface + "," + layout + "," + wrapper )); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("> (\""); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Class.Name )); #line default #line hidden #line 35 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\");\r\n"); #line default #line hidden #line 36 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" if (!hasBase) { #line default #line hidden #line 37 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\tpublic CppInstancePtr Native { get; protected set; }\r\n"); #line default #line hidden #line 38 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } #line default #line hidden #line 39 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\tpublic static bool operator!=("); #line default #line hidden #line 39 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 39 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" a, "); #line default #line hidden #line 39 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 39 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" b) { return !(a == b); }\r\n\t\tpublic static bool operator==("); #line default #line hidden #line 40 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 40 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" a, "); #line default #line hidden #line 40 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 40 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(@" b) { if (object.ReferenceEquals(a, b)) return true; if ((object)a == null || (object)b == null) return false; return a.Native == b.Native; } public override bool Equals(object obj) { return (this == obj as "); #line default #line hidden #line 48 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 48 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("); }\r\n public override int GetHashCode() { return this.Native.GetHashCode(" + "); }\r\n\r\n"); #line default #line hidden #line 51 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Interface */ #line default #line hidden #line 52 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t[MangleAs (\""); #line default #line hidden #line 52 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( Class.MangleType.ToString () )); #line default #line hidden #line 52 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\")]\r\n\t\tpublic partial interface "); #line default #line hidden #line 53 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( iface )); #line default #line hidden #line 53 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" : ICppClassOverridable<"); #line default #line hidden #line 53 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 53 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("> {\r\n"); #line default #line hidden #line 54 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t\t"); foreach (var method in Class.Methods) { Write (CurrentIndent); if (method.IsVirtual) Write ("[Virtual] "); if (method.IsStatic) Write ("[Static] "); if (method.IsArtificial) Write ("[Artificial] "); if (method.IsInline) Write ("[Inline] "); if (method.IsConst) Write ("[Const] "); if (method.IsConstructor) Write ("[Constructor] "); if (method.IsDestructor) Write ("[Destructor] "); if (method.IsCopyCtor) Write ("[CopyConstructor] "); if (method.IsProtected) Write ("[Protected] "); if (Generator.IsByVal (method.ReturnType)) { Write ("[return: ByVal] "); } else { var returnType = CSharpLanguage.TypeName (Generator.CppTypeToManaged (method.ReturnType), Context.Wrapper | Context.Return); var mangleAs = method.ReturnType.ToString(); if (mangleAs != "" && mangleAs != returnType) Write("[return: MangleAs (\"{0}\")] ", mangleAs); } if (method.IsConstructor) Write ("CppInstancePtr"); else Write (CSharpLanguage.TypeName (Generator.CppTypeToManaged (method.ReturnType), Context.Interface | Context.Return)); Write (" "); Write (CSharpLanguage.SafeIdentifier (method.Name)); Write (" ("); if (!method.IsStatic) { Write ("CppInstancePtr @this"); if (method.Parameters.Count != 0) Write (", "); } WriteParameters (method.Parameters, true, !method.IsVirtual, false); Write (");\n"); } foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { WriteLine ("CppField<{0}> {1} {{ get; }}", CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Interface | Context.Generic), CSharpLanguage.SafeIdentifier (field.Name)); } PopIndent (); #line default #line hidden #line 97 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t}\r\n"); #line default #line hidden #line 98 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Native layout */ #line default #line hidden #line 99 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\tpublic unsafe struct "); #line default #line hidden #line 99 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( layout )); #line default #line hidden #line 99 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" {\r\n"); #line default #line hidden #line 100 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t\t"); foreach (var field in Class.Fields) { // handle byval fields var fieldType = CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Generic); if (Generator.GetFilterOrDefault (field.Type).ImplType == ImplementationType.@class && Generator.IsByVal (field.Type)) fieldType = fieldType + "._" + fieldType; // handle fixed-length arrays var array = field.Type.Modifiers.OfType<CppModifiers.ArrayModifier> ().FirstOrDefault (); if (array != null && array.Size.HasValue) { var arrays = field.Type.Modifiers.OfType<CppModifiers.ArrayModifier>(); int totalSize = arrays.Where(a => a.Size.HasValue).Select(a => a.Size.Value).Aggregate((a, b) => a * b); fieldType = fieldType.TrimEnd ('[',']'); if (field.Type.IsFixedType) WriteLine ("public fixed {0} {1} [{2}];", fieldType, CSharpLanguage.SafeIdentifier(field.Name), totalSize); else { WriteLine ("[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst={0})]", totalSize); WriteLine ("public {0}[] {1};", fieldType, CSharpLanguage.SafeIdentifier(field.Name)); } } else { WriteLine ("public {0} {1};", fieldType, CSharpLanguage.SafeIdentifier (field.Name)); } } PopIndent (); #line default #line hidden #line 123 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t}\r\n\r\n"); #line default #line hidden #line 125 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Native fields */ #line default #line hidden #line 126 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t"); foreach (var field in Class.Fields.Where (f => f.Access != Access.@private)) { var fieldName = CSharpLanguage.SafeIdentifier (field.Name); WriteLine ("{0} {1} {2} {{", field.Access, CSharpLanguage.TypeName (Generator.CppTypeToManaged (field.Type), Context.Wrapper | Context.Return), fieldName); #line default #line hidden #line 130 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t\tget {\r\n\t\t\t\treturn impl."); #line default #line hidden #line 131 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( fieldName )); #line default #line hidden #line 131 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" [Native];\r\n\t\t\t}\r\n\t\t\tset {\r\n\t\t\t\timpl."); #line default #line hidden #line 134 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( fieldName )); #line default #line hidden #line 134 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" [Native] = value;\r\n\t\t\t}\r\n\t\t}\r\n"); #line default #line hidden #line 137 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } PopIndent(); #line default #line hidden #line 138 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden #line 139 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Marshaler */ #line default #line hidden #line 140 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(@" class Marshaler : ICustomMarshaler { private Marshaler () { } public object MarshalNativeToManaged (IntPtr pNativeData) { return CppMarshaler.MarshalNativeToManaged(pNativeData, () => new "); #line default #line hidden #line 149 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 149 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(@"(pNativeData)); } public IntPtr MarshalManagedToNative (object managedObj) { throw new NotImplementedException (); } public void CleanUpNativeData (IntPtr pNativeData) { } public void CleanUpManagedData (object managedObj) { } public int GetNativeDataSize () { throw new NotImplementedException (); } public static ICustomMarshaler GetInstance (string pstrCookie) { return new Marshaler(); } } "); #line default #line hidden #line 176 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Nested classes */ #line default #line hidden #line 177 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" foreach (var klass in Class.NestedClasses) { var nestedTempl = new CSharpClass { Generator = this.Generator, Class = klass, Nested = true }; Write (nestedTempl.TransformText ()); } #line default #line hidden #line 185 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden #line 186 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Nested enums */ #line default #line hidden #line 187 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" foreach (var @enum in Class.NestedEnums) { Generator.EnumTemplate.Generator = Generator; Generator.EnumTemplate.Enum = @enum; Generator.EnumTemplate.Nested = true; Write (Generator.EnumTemplate.TransformText ()); } #line default #line hidden #line 193 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden #line 194 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Nested Delegates */ #line default #line hidden #line 195 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" foreach (var function in Class.NestedDelegates) { Generator.FunctionTemplate.Generator = Generator; Generator.FunctionTemplate.Function = function; Generator.FunctionTemplate.Nested = true; Write (Generator.FunctionTemplate.TransformText ()); } #line default #line hidden #line 201 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden #line 202 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Subclass constructor */ #line default #line hidden #line 203 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\tpublic "); #line default #line hidden #line 203 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 203 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" (CppTypeInfo subClass)\r\n\t\t"); #line default #line hidden #line 204 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass )); #line default #line hidden #line 204 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\t\t\tsubClass.AddBase (impl.TypeInfo);\r\n\t\t}\r\n\r\n"); #line default #line hidden #line 208 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Native constructor */ #line default #line hidden #line 209 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\tpublic "); #line default #line hidden #line 209 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 209 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" (CppInstancePtr native)\r\n\t\t"); #line default #line hidden #line 210 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( layoutClass )); #line default #line hidden #line 210 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\t\t\tNative = native;\r\n\t\t"); #line default #line hidden #line 212 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( initBases )); #line default #line hidden #line 212 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\r\n"); #line default #line hidden #line 214 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Wrapper methods */ #line default #line hidden #line 215 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t"); foreach (var method in Class.Methods.Where (m => m.GenWrapperMethod)) { var methodName = CSharpLanguage.SafeIdentifier (method.Name); WriteMethodHeader (method, layoutClass, false, false); if (method.IsConstructor) Write ("Native = "); Write ("impl.{0} (", methodName); if (!method.IsStatic) { if (method.IsConstructor) Write ("impl.Alloc (this)"); else Write ("Native"); if (method.Parameters.Count != 0) Write (", "); } WriteParameters (method.Parameters, false, false, true); Write (");\n"); PopIndent (); if (method.IsConstructor) WriteLine (initBases); else WriteLine ("}"); } PopIndent (); #line default #line hidden #line 243 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden #line 244 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Wrapper properties */ #line default #line hidden #line 245 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t"); foreach (var prop in Class.Properties) { var propName = CSharpLanguage.SafeIdentifier (prop.Name); var type = CSharpLanguage.TypeName (Generator.CppTypeToManaged (prop.Type), Context.Wrapper | Context.Return); Write (CurrentIndent + "public "); if ((prop.GetMethod == null || prop.GetMethod.IsVirtual) && (prop.SetMethod == null || prop.SetMethod.IsVirtual)) Write ("virtual "); Write (type); Write (" "); Write (propName); Write (" {\n"); PushIndent ("\t"); Write (CurrentIndent); if (prop.GetMethod != null) { if (prop.GetMethod.IsVirtual) Write ("[OverrideNative (\"{0}\")] ", prop.GetMethod.Name); Write ("get {\n"); PushIndent ("\t"); WriteLine ("return impl.{0} (Native);", prop.GetMethod.Name); PopIndent (); WriteLine ("}"); } if (prop.SetMethod != null) { if (prop.SetMethod.IsVirtual) Write ("[OverrideNative (\"{0}\")] ", prop.SetMethod.Name); WriteLine ("set {"); PushIndent ("\t"); WriteLine ("impl.{0} (Native, value);", prop.SetMethod.Name); PopIndent (); WriteLine ("}"); } PopIndent (); WriteLine ("}\n"); } PopIndent (); #line default #line hidden #line 289 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\t\tpartial void BeforeDestruct ();\r\n\t\tpartial void AfterDestruct ();\r\n\r\n\t\tpublic" + " "); #line default #line hidden #line 293 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( hasBase? "override" : "virtual" )); #line default #line hidden #line 293 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" void Dispose ()\r\n\t\t{\r\n\t\t\tBeforeDestruct ();\r\n"); #line default #line hidden #line 296 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" if (Class.Methods.Any (m => m.IsDestructor && !m.IsArtificial)) { #line default #line hidden #line 297 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t\timpl.Destruct (Native);\r\n"); #line default #line hidden #line 298 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } #line default #line hidden #line 299 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t\tNative.Dispose ();\r\n\t\t\tAfterDestruct ();\r\n\t\t}\r\n\r\n\t\tprivate void __cxxi_LayoutC" + "lass ()\r\n\t\t{\r\n"); #line default #line hidden #line 305 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" foreach (var npBase in Class.BaseClasses.Skip (1)) { #line default #line hidden #line 306 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t\tnew "); #line default #line hidden #line 306 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 306 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" (impl.TypeInfo);\r\n"); #line default #line hidden #line 307 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } #line default #line hidden #line 308 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t\timpl.TypeInfo.CompleteType ();\r\n\t\t}\r\n\r\n"); #line default #line hidden #line 311 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Make this wrapper castable to non-primary bases */ foreach (var npBase in Class.BaseClasses.Skip (1)) { #line default #line hidden #line 313 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n#region Non-primary base class implementation for "); #line default #line hidden #line 314 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 314 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n\t\tprivate class "); #line default #line hidden #line 315 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 315 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" : "); #line default #line hidden #line 315 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 315 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" {\r\n\t\t\tpublic "); #line default #line hidden #line 316 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 316 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" instance;\r\n\t\t\tpublic "); #line default #line hidden #line 317 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 317 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" ("); #line default #line hidden #line 317 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 317 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" instance)\r\n\t\t\t\t: base ("); #line default #line hidden #line 318 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 318 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(".impl.TypeInfo.Cast (instance, typeof ("); #line default #line hidden #line 318 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 318 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(")))\r\n\t\t\t{\r\n\t\t\t\t"); #line default #line hidden #line 320 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 320 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(".impl.TypeInfo.InitNonPrimaryBase (this, instance, typeof ("); #line default #line hidden #line 320 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 320 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("));\r\n\t\t\t\tthis.instance = instance;\r\n\t\t\t}\r\n\r\n"); #line default #line hidden #line 324 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t\t"); foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) { if (!method.GenWrapperMethod || Class.Methods.Any (m => m.Node.CheckValue ("overrides", method.Node.Id))) continue; /* this is the managed override that has to call the subclass's method */ WriteMethodHeader (method, null, true, false); Write ("instance.{0} (", npBase.Name + "__" + method.FormattedName); WriteParameters (method.Parameters, false, false, false); PopIndent (); Write (");\n{0}}}\n\n", CurrentIndent); /* this is the method that calls the base implementation that the subclass will use */ WriteMethodHeader (method, npBase.Name + "__" + method.FormattedName, true, false); Write ("base.{0} (", method.FormattedName); WriteParameters (method.Parameters, false, false, false); PopIndent (); Write (");\n{0}}}\n\n", CurrentIndent); } PopIndent (); #line default #line hidden #line 349 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t}\r\n\t\tprivate "); #line default #line hidden #line 350 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 350 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("__"); #line default #line hidden #line 350 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 350 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" __cxxi_"); #line default #line hidden #line 350 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 350 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(";\r\n\t\tpublic "); #line default #line hidden #line 351 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 351 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" "); #line default #line hidden #line 351 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 351 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" { get { return __cxxi_"); #line default #line hidden #line 351 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 351 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("; } }\r\n\t\tpublic static implicit operator "); #line default #line hidden #line 352 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 352 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("("); #line default #line hidden #line 352 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 352 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" subClass)\r\n\t\t{\r\n\t\t\treturn subClass."); #line default #line hidden #line 354 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 354 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(";\r\n\t\t}\r\n\t\tpublic static explicit operator "); #line default #line hidden #line 356 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper )); #line default #line hidden #line 356 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("("); #line default #line hidden #line 356 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 356 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" baseClass)\r\n\t\t{\r\n\t\t\tif (baseClass == null) return null;\r\n\t\t\tvar obj = baseClass " + "as "); #line default #line hidden #line 359 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 359 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(";\r\n\t\t\tif (obj == null) throw new InvalidCastException ();\r\n\t\t\treturn obj.instance" + ";\r\n\t\t}\r\n\r\n"); #line default #line hidden #line 364 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" /* Add virtual methods of non-primary bases to this class proper so they can be overridden */ #line default #line hidden #line 365 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" PushIndent ("\t\t"); foreach (var method in npBase.Methods.Where (m => m.IsVirtual)) { if (!method.GenWrapperMethod || Class.Methods.Any (m => m.Node.CheckValue ("overrides", method.Node.Id))) continue; WriteMethodHeader (method, npBase.Name + "__" + method.FormattedName, true, true); Write ("{0}.{1} (", "__cxxi_" + npBase.Name, npBase.Name + "__" + method.FormattedName); WriteParameters (method.Parameters, false, false, false); PopIndent (); Write (");\n{0}}}\n\n", CurrentIndent); } PopIndent (); WriteLine ("#endregion"); } if (overrideInitBases || Class.BaseClasses.Count > 1) { #line default #line hidden #line 384 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\tprotected "); #line default #line hidden #line 384 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases ? "override" : "virtual" )); #line default #line hidden #line 384 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" void __cxxi_InitBases ()\r\n\t\t{\r\n\t\t\t"); #line default #line hidden #line 386 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( overrideInitBases? "base.__cxxi_InitBases ();" : "" )); #line default #line hidden #line 386 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden #line 387 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" foreach (var npBase in Class.BaseClasses.Skip (1)) { #line default #line hidden #line 388 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t\t__cxxi_"); #line default #line hidden #line 388 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( npBase.Name )); #line default #line hidden #line 388 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" = new "); #line default #line hidden #line 388 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(this.ToStringHelper.ToStringWithCulture( wrapper + "__" + npBase.Name )); #line default #line hidden #line 388 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write(" (this);\r\n"); #line default #line hidden #line 389 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } #line default #line hidden #line 390 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t\t}\r\n"); #line default #line hidden #line 391 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } #line default #line hidden #line 392 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\t}\r\n"); #line default #line hidden #line 393 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" if (!Nested) { #line default #line hidden #line 394 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("}\r\n"); #line default #line hidden #line 395 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" } #line default #line hidden #line 396 "C:\Users\Kevin\code\VisualStudio\cxxi\src\generator\Templates\CSharp\CSharpClass.tt" this.Write("\r\n"); #line default #line hidden return this.GenerationEnvironment.ToString(); }