| // Test using a target language specified base class, primarily for Java/C#/D and possibly other single inheritance languages |
| |
| // Note the multiple inheritance warnings don't appear because of the two techniques used in here: typemaps and %ignore |
| |
| %module inherit_target_language |
| |
| #if defined(SWIGJAVA) |
| # define csbase javabase |
| #elif defined(SWIGD) |
| # define csbase dbase |
| #endif |
| |
| %pragma(csharp) moduleimports=%{ |
| using System; |
| using System.Runtime.InteropServices; |
| public class TargetLanguageBase { public virtual void targetLanguageBaseMethod() {} }; |
| public class TargetLanguageBase2 { public virtual void targetLanguageBase2Method() {} }; |
| %} |
| |
| %pragma(java) moduleimports=%{ |
| class TargetLanguageBase { public void targetLanguageBaseMethod() {} }; |
| class TargetLanguageBase2 { public void targetLanguageBase2Method() {} }; |
| %} |
| |
| %pragma(d) globalproxyimports=%{ |
| private class TargetLanguageBase { public void targetLanguageBaseMethod() {} }; |
| private class TargetLanguageBase2 { public void targetLanguageBase2Method() {} }; |
| %} |
| |
| %typemap(csbase) SWIGTYPE "TargetLanguageBase" |
| |
| // Two ways to replace a C++ base with a completely different target language base |
| %ignore Base1; // another way to use the target language base |
| %typemap(csbase, replace="1") Derived2 "TargetLanguageBase" |
| |
| %inline %{ |
| struct Base1 { virtual ~Base1() {} }; |
| struct Base2 { virtual ~Base2() {} }; |
| struct Derived1 : Base1 {}; |
| struct Derived2 : Base2 {}; |
| %} |
| |
| // Multiple inheritance |
| %ignore MBase1a; |
| %ignore MBase1b; |
| %typemap(csbase, replace="1") MultipleDerived2 "TargetLanguageBase" |
| |
| %inline %{ |
| struct MBase1a { virtual ~MBase1a() {} virtual void a() {} }; |
| struct MBase1b { virtual ~MBase1b() {} virtual void b() {} }; |
| struct MBase2a { virtual ~MBase2a() {} virtual void c() {} }; |
| struct MBase2b { virtual ~MBase2b() {} virtual void d() {} }; |
| struct MultipleDerived1 : MBase1a, MBase1b {}; |
| struct MultipleDerived2 : MBase1a, MBase2b {}; |
| %} |
| |
| |
| %ignore MBase3a; |
| %ignore MBase4b; |
| %typemap(csbase) MultipleDerived3 "" |
| %typemap(csbase) MultipleDerived4 "" |
| |
| %inline %{ |
| struct MBase3a { virtual ~MBase3a() {} virtual void e() {} }; |
| struct MBase3b { virtual ~MBase3b() {} virtual void f() {} }; |
| struct MBase4a { virtual ~MBase4a() {} virtual void g() {} }; |
| struct MBase4b { virtual ~MBase4b() {} virtual void h() {} }; |
| struct MultipleDerived3 : MBase3a, MBase3b {}; |
| struct MultipleDerived4 : MBase4a, MBase4b {}; |
| %} |
| |
| // Replace a C++ base, but only classes that do not have a C++ base |
| %typemap(csbase, notderived="1") SWIGTYPE "TargetLanguageBase2" |
| |
| %inline %{ |
| struct BaseX { virtual ~BaseX() {}; void basex() {} }; |
| struct DerivedX : BaseX { void derivedx() {} }; |
| %} |
| |