import source from 1.3.40
[external/swig.git] / Examples / test-suite / minherit2.i
1 %module minherit2
2
3 // A multiple inheritance example, mainly for Java and C#.
4 // The example shows how it is possible to turn C++ abstract base classes into Java/C# interface.
5 // In the future, all this trouble might be more automated.
6
7 %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
8             SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
9             SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
10             SWIGWARN_PHP_MULTIPLE_INHERITANCE) RemoteMpe;
11
12
13 #if defined(SWIGJAVA) || defined(SWIGCSHARP)
14
15 #if defined(SWIGCSHARP)
16 #define javaclassmodifiers   csclassmodifiers
17 #define javabody             csbody
18 #define javafinalize         csfinalize
19 #define javadestruct         csdestruct
20 #define javaout              csout
21 #define javainterfaces       csinterfaces
22 #define javabase             csbase
23 #endif
24
25 // Modify multiple inherited base classes into inheriting interfaces
26 %typemap(javainterfaces) RemoteMpe "IRemoteSyncIO, IRemoteAsyncIO";
27 %typemap(javabase, replace="1") RemoteMpe "";
28
29 // Turn the proxy class into an interface
30 %typemap(javaclassmodifiers) IRemoteSyncIO "public interface";
31 %typemap(javaclassmodifiers) IRemoteAsyncIO "public interface";
32 %typemap(javabody) IRemoteSyncIO "";
33 %typemap(javabody) IRemoteAsyncIO "";
34 %typemap(javafinalize) IRemoteSyncIO "";
35 %typemap(javafinalize) IRemoteAsyncIO "";
36 %typemap(javadestruct) IRemoteSyncIO "";
37 %typemap(javadestruct) IRemoteAsyncIO "";
38
39 // Turn the methods into abstract methods
40 %typemap(javaout) void IRemoteSyncIO::syncmethod ";"
41 %typemap(javaout) void IRemoteAsyncIO::asyncmethod ";"
42 #if defined(SWIGJAVA)
43 %javamethodmodifiers IRemoteSyncIO::syncmethod "abstract public";
44 %javamethodmodifiers IRemoteAsyncIO::asyncmethod "abstract public";
45 // Features are inherited by derived classes, so override this
46 %javamethodmodifiers RemoteMpe::syncmethod "public"
47 %javamethodmodifiers RemoteMpe::asyncmethod "public"
48 #elif defined(SWIGCSHARP)
49 %csmethodmodifiers IRemoteSyncIO::syncmethod "";
50 %csmethodmodifiers IRemoteAsyncIO::asyncmethod "";
51 // Features are inherited by derived classes, so override this
52 %csmethodmodifiers RemoteMpe::syncmethod "public"
53 %csmethodmodifiers RemoteMpe::asyncmethod "public"
54 #endif
55
56 #endif
57
58
59 %inline %{
60 class IRemoteSyncIO
61 {
62 public:
63   virtual ~IRemoteSyncIO () {}
64   virtual void syncmethod() = 0;
65 protected:
66   IRemoteSyncIO () {}
67   
68 private:
69   IRemoteSyncIO (const IRemoteSyncIO&);
70   IRemoteSyncIO& operator= (const IRemoteSyncIO&);
71 };
72
73 class IRemoteAsyncIO
74 {
75 public:
76   virtual ~IRemoteAsyncIO () {}
77   virtual void asyncmethod() = 0;
78 protected:
79   IRemoteAsyncIO () {}
80   
81 private:
82   IRemoteAsyncIO (const IRemoteAsyncIO&);
83   IRemoteAsyncIO& operator= (const IRemoteAsyncIO&);
84 };
85
86 class RemoteMpe : public IRemoteSyncIO, public IRemoteAsyncIO
87 {
88 public:
89   virtual void syncmethod() {}
90   virtual void asyncmethod() {}
91 };
92
93 %}
94