Browse Source

Added an IMarshalPrinter interface.

pull/1/head
triton 13 years ago
parent
commit
4072a2a8bb
  1. 28
      src/Generator/Generators/CLI/CLIMarshal.cs

28
src/Generator/Generators/CLI/CLIMarshal.cs

@ -4,19 +4,27 @@ using Cxxi.Types;
namespace Cxxi.Generators.CLI namespace Cxxi.Generators.CLI
{ {
public class CLIMarshalNativeToManagedPrinter : ITypeVisitor<bool>, public interface IMarshalPrinter : ITypeVisitor<bool>, IDeclVisitor<bool>
IDeclVisitor<bool> {
}
public class CLIMarshalNativeToManagedPrinter : IMarshalPrinter
{ {
public TextGenerator Support; public TextGenerator Support;
public TextGenerator Return; public TextGenerator Return;
Generator Generator { get; set; } Library Library { get; set; }
ITypeMapDatabase TypeMapDatabase { get; set; }
MarshalContext Context { get; set; } MarshalContext Context { get; set; }
public CLIMarshalNativeToManagedPrinter(Generator gen, MarshalContext ctx) public CLIMarshalNativeToManagedPrinter(ITypeMapDatabase database,
Library library, MarshalContext marshalContext)
{ {
Generator = gen; Library = library;
Context = ctx; TypeMapDatabase = database;
Context = marshalContext;
Support = new TextGenerator(); Support = new TextGenerator();
Return = new TextGenerator(); Return = new TextGenerator();
} }
@ -107,7 +115,7 @@ namespace Cxxi.Generators.CLI
var decl = typedef.Declaration; var decl = typedef.Declaration;
TypeMap typeMap = null; TypeMap typeMap = null;
if (Generator.TypeMapDatabase.FindTypeMap(decl, out typeMap)) if (TypeMapDatabase.FindTypeMap(decl, out typeMap))
{ {
Return.Write(typeMap.MarshalFromNative(Context)); Return.Write(typeMap.MarshalFromNative(Context));
return typeMap.IsValueType; return typeMap.IsValueType;
@ -144,8 +152,7 @@ namespace Cxxi.Generators.CLI
if (@class.IsRefType) if (@class.IsRefType)
Return.Write("gcnew "); Return.Write("gcnew ");
Return.Write("{0}::{1}(", Generator.Library.Name, Return.Write("{0}::{1}(", Library.Name, @class.Name);
@class.Name);
Return.Write("(::{0}*)", @class.QualifiedOriginalName); Return.Write("(::{0}*)", @class.QualifiedOriginalName);
@ -190,8 +197,7 @@ namespace Cxxi.Generators.CLI
private string ToCLITypeName(Declaration decl) private string ToCLITypeName(Declaration decl)
{ {
var typePrinter = new CLITypePrinter(Generator.TypeMapDatabase, var typePrinter = new CLITypePrinter(TypeMapDatabase, Library);
Generator.Library);
return typePrinter.VisitDeclaration(decl); return typePrinter.VisitDeclaration(decl);
} }

Loading…
Cancel
Save