summaryrefslogtreecommitdiff
path: root/Examples/test-suite/multiple_inheritance.i
blob: 0443450204aedc011ff6410504cb2b4aaf271811 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* This was broken in the perl module.  See bug 962115 
It tests basic multiple inheritance */

%module(ruby_minherit="1") multiple_inheritance

%warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
	    SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
	    SWIGWARN_D_MULTIPLE_INHERITANCE,
	    SWIGWARN_PHP_MULTIPLE_INHERITANCE) FooBar;	/* C#, D, Java, PHP multiple inheritance */

%warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
	    SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
	    SWIGWARN_D_MULTIPLE_INHERITANCE,
	    SWIGWARN_PHP_MULTIPLE_INHERITANCE) FooBarSpam;	/* C#, D, Java, PHP multiple inheritance */


%inline %{

class Bar {
public:
  virtual ~Bar()
  {
  }
  
  virtual int bar() { return 1; }
};

class Foo {
public:
  virtual ~Foo()
  {
  }

  virtual int foo() { return 2; }
};

template<class T> class Spam {
public:
  virtual ~Spam()
  {
  }
  
  virtual int spam(const T& t) { return 100; }
};
%}

%template(SpamInt) Spam<int>;

%inline %{
class FooBar : public Foo, public Bar {
public:
  virtual int fooBar() { return 3; }
};

class FooBarSpam : public Foo, public Bar, public Spam<int> {
public:
  virtual int fooBarSpam() { return 4; }
};

%}

// Languages that don't support multiple inheritance should inherit from one of the non-ignored classes
%ignore IgnoreMe;
%ignore IgnoreMeToo;

%inline %{
class IgnoreMe {
public:
  virtual int ignoreme() { return 5; }
  virtual ~IgnoreMe() {}
};
class IgnoreMeToo {
public:
  virtual int ignoremetoo() { return 6; }
  virtual ~IgnoreMeToo() {}
};
class IgnoreDerived1 : public IgnoreMe, public Bar {
public:
  virtual int ignorederived1() { return 7; }
};
class IgnoreDerived2 : public IgnoreMe, public IgnoreMeToo, public Bar {
public:
  virtual int ignorederived2() { return 8; }
};
class IgnoreDerived3 : public IgnoreMe, public Bar, public IgnoreMeToo {
public:
  virtual int ignorederived3() { return 9; }
};
class IgnoreDerived4 : public Bar, public IgnoreMe, public IgnoreMeToo {
public:
  virtual int ignorederived4() { return 10; }
};
%}