/trunk/Examples/test-suite/inherit_target_language.i
Swig | 79 lines | 62 code | 17 blank | 0 comment | 0 complexity | 3bd732bf020d970a5398054a17a1540c MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- // 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() {} };
- %}