import source from 1.3.40
[external/swig.git] / Examples / test-suite / inherit_target_language.i
1 // Test using a target language specified base class, primarily for Java/C# and possibly other single inheritance languages
2
3 // Note the multiple inheritance warnings don't appear because of the two techniques used in here: typemaps and %ignore
4
5 %module inherit_target_language
6
7 #if defined(SWIGJAVA)
8 # define csbase javabase
9 #endif
10
11 %pragma(csharp) moduleimports=%{
12 using System;
13 using System.Runtime.InteropServices;
14 public class TargetLanguageBase { public virtual void targetLanguageBaseMethod() {} };
15 public class TargetLanguageBase2 { public virtual void targetLanguageBase2Method() {} };
16 %}
17
18 %pragma(java) moduleimports=%{
19 class TargetLanguageBase { public void targetLanguageBaseMethod() {} };
20 class TargetLanguageBase2 { public void targetLanguageBase2Method() {} };
21 %}
22
23
24 %typemap(csbase) SWIGTYPE "TargetLanguageBase"
25
26 // Two ways to replace a C++ base with a completely different target language base
27 %ignore Base1; // another way to use the target language base
28 %typemap(csbase, replace="1") Derived2 "TargetLanguageBase"
29
30 %inline %{
31 struct Base1 { virtual ~Base1() {} };
32 struct Base2 { virtual ~Base2() {} };
33 struct Derived1 : Base1 {};
34 struct Derived2 : Base2 {};
35 %}
36
37 // Multiple inheritance
38 %ignore MBase1a;
39 %ignore MBase1b;
40 %typemap(csbase, replace="1") MultipleDerived2 "TargetLanguageBase"
41
42 %inline %{
43 struct MBase1a { virtual ~MBase1a() {} virtual void a() {} };
44 struct MBase1b { virtual ~MBase1b() {} virtual void b() {} };
45 struct MBase2a { virtual ~MBase2a() {} virtual void c() {} };
46 struct MBase2b { virtual ~MBase2b() {} virtual void d() {} };
47 struct MultipleDerived1 : MBase1a, MBase1b {};
48 struct MultipleDerived2 : MBase1a, MBase2b {};
49 %}
50
51
52 %ignore MBase3a;
53 %ignore MBase4b;
54 %typemap(csbase) MultipleDerived3 ""
55 %typemap(csbase) MultipleDerived4 ""
56
57 %inline %{
58 struct MBase3a { virtual ~MBase3a() {} virtual void e() {} };
59 struct MBase3b { virtual ~MBase3b() {} virtual void f() {} };
60 struct MBase4a { virtual ~MBase4a() {} virtual void g() {} };
61 struct MBase4b { virtual ~MBase4b() {} virtual void h() {} };
62 struct MultipleDerived3 : MBase3a, MBase3b {};
63 struct MultipleDerived4 : MBase4a, MBase4b {};
64 %}
65
66 // Replace a C++ base, but only classes that do not have a C++ base
67 %typemap(csbase, notderived="1") SWIGTYPE "TargetLanguageBase2"
68
69 %inline %{
70 struct BaseX            { virtual ~BaseX() {}; void basex() {} };
71 struct DerivedX : BaseX { void derivedx() {} };
72 %}
73