Browse Source

Reference classes now implement the ICppInstance interface.

This will be used to add support for overrides of Equals and GetHashCode.
pull/13/merge
triton 13 years ago
parent
commit
2e97311423
  1. 34
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  2. 20
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

34
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -237,7 +237,7 @@ namespace CppSharp.Generators.CLI @@ -237,7 +237,7 @@ namespace CppSharp.Generators.CLI
WriteLine("};");
}
public void GenerateClassNativeField(Class @class, string nativeType)
internal static bool HasRefBase(Class @class)
{
Class baseClass = null;
@ -247,13 +247,24 @@ namespace CppSharp.Generators.CLI @@ -247,13 +247,24 @@ namespace CppSharp.Generators.CLI
var hasRefBase = baseClass != null && baseClass.IsRefType
&& !baseClass.Ignore;
var hasIgnoredBase = baseClass != null && baseClass.Ignore;
return hasRefBase;
}
if (!@class.HasBase || !hasRefBase || hasIgnoredBase)
{
WriteLineIndent("property {0} NativePtr;", nativeType);
NewLine();
}
public void GenerateClassNativeField(Class @class, string nativeType)
{
if (HasRefBase(@class)) return;
WriteLineIndent("property {0} NativePtr;", nativeType);
PushIndent();
WriteLine("property System::IntPtr Instance");
WriteStartBraceIndent();
WriteLine("virtual System::IntPtr get();");
WriteLine("virtual void set(System::IntPtr instance);");
WriteCloseBraceIndent();
NewLine();
PopIndent();
}
public void GenerateClassGenericMethods(Class @class)
@ -462,11 +473,12 @@ namespace CppSharp.Generators.CLI @@ -462,11 +473,12 @@ namespace CppSharp.Generators.CLI
return true;
}
if (@class.HasBase && !@class.IsValueType)
if (!@class.Bases[0].Class.Ignore)
Write(" : {0}", QualifiedIdentifier(@class.Bases[0].Class));
if (HasRefBase(@class))
Write(" : {0}", QualifiedIdentifier(@class.Bases[0].Class));
else if (@class.IsRefType)
Write(" : ICppInstance");
WriteLine(string.Empty);
NewLine();
WriteLine("{");
WriteLine("public:");
return false;

20
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -151,6 +151,26 @@ namespace CppSharp.Generators.CLI @@ -151,6 +151,26 @@ namespace CppSharp.Generators.CLI
if (@class.IsRefType)
{
if (!CLIHeadersTemplate.HasRefBase(@class))
{
PushBlock(CLIBlockKind.Method);
WriteLine("System::IntPtr {0}::Instance::get()",
QualifiedIdentifier(@class));
WriteStartBraceIndent();
WriteLine("return System::IntPtr(NativePtr);");
WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock);
PushBlock(CLIBlockKind.Method);
WriteLine("void {0}::Instance::set(System::IntPtr object)",
QualifiedIdentifier(@class));
WriteStartBraceIndent();
var nativeType = string.Format("::{0}*", @class.QualifiedOriginalName);
WriteLine("NativePtr = ({0})object.ToPointer();", nativeType);
WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock);
}
foreach (var field in @class.Fields)
{
if (ASTUtils.CheckIgnoreField(@class, field))

Loading…
Cancel
Save