private void GenerateEventRaiseWrapper(Event @event, Class @class) { var typePrinter = new CppTypePrinter(); var args = typePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void {0}::_{1}Raise({2})", QualifiedIdentifier(@class), @event.Name, args); WriteStartBraceIndent(); var returns = new List <string>(); foreach (var param in @event.Parameters) { var ctx = new MarshalContext(Context) { ReturnVarName = param.Name, ReturnType = param.QualifiedType }; var marshal = new CLIMarshalNativeToManagedPrinter(ctx); param.Visit(marshal); returns.Add(marshal.Context.Return); } Write("{0}::raise(", @event.Name); Write("{0}", string.Join(", ", returns)); WriteLine(");"); WriteCloseBraceIndent(); }
private void GenerateEventAdd(Event @event, Class @class) { WriteLine("void {0}::{1}::add({2} evt)", QualifiedIdentifier(@class), @event.Name, @event.Type); WriteStartBraceIndent(); var delegateName = string.Format("_{0}Delegate", @event.Name); WriteLine("if (!{0}Instance)", delegateName); WriteStartBraceIndent(); var typePrinter = new CppTypePrinter(); var args = typePrinter.VisitParameters(@event.Parameters, hasNames: false); WriteLine("{0}Instance = gcnew {0}(this, &{1}::_{2}Raise);", delegateName, QualifiedIdentifier(@class), @event.Name); WriteLine("auto _fptr = (void (*)({0}))Marshal::GetFunctionPointerForDelegate({1}Instance).ToPointer();", args, delegateName); WriteLine("((::{0}*)NativePtr)->{1}.Connect(_fptr);", @class.QualifiedOriginalName, @event.OriginalName); WriteCloseBraceIndent(); WriteLine("_{0} = static_cast<{1}>(System::Delegate::Combine(_{0}, evt));", @event.Name, @event.Type); WriteCloseBraceIndent(); }
public override void GenerateClassEvents(Class @class) { foreach (var @event in @class.Events) { if ([email protected]) { continue; } var cppTypePrinter = new CppTypePrinter(Context); cppTypePrinter.PushContext(TypePrinterContextKind.Native); var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("private:"); Indent(); var delegateName = string.Format("_{0}Delegate", @event.Name); WriteLine("delegate void {0}({1});", delegateName, cppArgs); WriteLine("{0}^ {0}Instance;", delegateName); WriteLine("void _{0}Raise({1});", @event.Name, cppArgs); WriteLine("{0} _{1};", @event.Type, @event.Name); Unindent(); WriteLine("public:"); Indent(); WriteLine("event {0} {1}", @event.Type, @event.Name); WriteOpenBraceAndIndent(); WriteLine("void add({0} evt);", @event.Type); WriteLine("void remove({0} evt);", @event.Type); var cliTypePrinter = new CLITypePrinter(Context); var cliArgs = cliTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void raise({0});", cliArgs); UnindentAndWriteCloseBrace(); Unindent(); } }
public void GenerateClassEvents(Class @class) { foreach (var @event in @class.Events) { if ([email protected]) { continue; } var cppTypePrinter = new CppTypePrinter(Driver.TypeDatabase); var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("private:"); PushIndent(); var delegateName = string.Format("_{0}Delegate", @event.Name); WriteLine("delegate void {0}({1});", delegateName, cppArgs); WriteLine("{0}^ {0}Instance;", delegateName); WriteLine("void _{0}Raise({1});", @event.Name, cppArgs); WriteLine("{0} _{1};", @event.Type, @event.Name); PopIndent(); WriteLine("public:"); PushIndent(); WriteLine("event {0} {1}", @event.Type, @event.Name); WriteStartBraceIndent(); WriteLine("void add({0} evt);", @event.Type); WriteLine("void remove({0} evt);", @event.Type); var cliTypePrinter = new CLITypePrinter(Driver); var cliArgs = cliTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void raise({0});", cliArgs); WriteCloseBraceIndent(); PopIndent(); } }
public void GenerateClassEvents(Class @class) { foreach (var @event in @class.Events) { if ([email protected]) continue; var cppTypePrinter = new CppTypePrinter(); var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("private:"); PushIndent(); var delegateName = string.Format("_{0}Delegate", @event.Name); WriteLine("delegate void {0}({1});", delegateName, cppArgs); WriteLine("{0}^ {0}Instance;", delegateName); WriteLine("void _{0}Raise({1});", @event.Name, cppArgs); WriteLine("{0} _{1};", @event.Type, @event.Name); PopIndent(); WriteLine("public:"); PushIndent(); WriteLine("event {0} {1}", @event.Type, @event.Name); WriteStartBraceIndent(); WriteLine("void add({0} evt);", @event.Type); WriteLine("void remove({0} evt);", @event.Type); var cliTypePrinter = new CLITypePrinter(Driver); var cliArgs = cliTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void raise({0});", cliArgs); WriteCloseBraceIndent(); PopIndent(); } }