import source from 1.3.40
[external/swig.git] / Examples / test-suite / pure_virtual.i
1 /* SF Bug #445219, submitted by Krzysztof Kozminski
2    <kozminski@users.sf.net>. 
3
4    Swig 1.3.6 gets confused by pure virtual destructors,
5    as in this file:
6 */
7
8 %module(ruby_minherit="1") pure_virtual
9
10 %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
11             SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
12             SWIGWARN_PHP_MULTIPLE_INHERITANCE) E; /* C#, Java, PHP multiple inheritance */
13
14 %nodefaultctor C;
15 %nodefaultdtor C;
16 %nodefaultctor E;
17 %nodefaultdtor E;
18
19 %inline %{
20
21 class A {
22  public:
23   A() { };
24   virtual ~A() = 0;
25   virtual void something() = 0;
26   virtual void method() = 0;
27 };
28
29 class B : public A {
30 public:
31   B() {};
32   virtual ~B() { };
33   virtual void something() { };
34   virtual void method() { };
35 };
36
37 /* class C is abstract because it doesn't define all methods in A */
38 class C : public A {
39  public:
40   virtual ~C() { };
41   virtual void method() { };
42 }
43 ;
44
45 /* class D is not abstract, it defines everything */
46 class D : public C {
47  public:
48   virtual ~D() { };
49   virtual void something() { };
50 }
51 ;
52
53 /* Another abstract class */
54 class AA {
55   public:
56      virtual ~AA() { }
57      virtual void method2() = 0;
58 };
59
60 /* Multiple inheritance between two abstract classes */
61 class E : public C, public AA {
62 public:
63    virtual void something() { };
64 };
65 %}
66
67 /* Fill in method from AA.  This class should be constructable */
68 #ifdef SWIGCSHARP
69 %ignore F::method2(); // Work around for lack of multiple inheritance support - base AA is ignored.
70 #endif
71
72 %inline %{
73 class F : public E {
74    public:
75      virtual void method2() { }
76 };
77 %}
78
79 %{
80 A::~A() {}
81 %}
82