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.
7 %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
8 SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
9 SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
10 SWIGWARN_PHP_MULTIPLE_INHERITANCE) RemoteMpe;
13 #if defined(SWIGJAVA) || defined(SWIGCSHARP)
15 #if defined(SWIGCSHARP)
16 #define javaclassmodifiers csclassmodifiers
17 #define javabody csbody
18 #define javafinalize csfinalize
19 #define javadestruct csdestruct
21 #define javainterfaces csinterfaces
22 #define javabase csbase
25 // Modify multiple inherited base classes into inheriting interfaces
26 %typemap(javainterfaces) RemoteMpe "IRemoteSyncIO, IRemoteAsyncIO";
27 %typemap(javabase, replace="1") RemoteMpe "";
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 "";
39 // Turn the methods into abstract methods
40 %typemap(javaout) void IRemoteSyncIO::syncmethod ";"
41 %typemap(javaout) void IRemoteAsyncIO::asyncmethod ";"
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"
63 virtual ~IRemoteSyncIO () {}
64 virtual void syncmethod() = 0;
69 IRemoteSyncIO (const IRemoteSyncIO&);
70 IRemoteSyncIO& operator= (const IRemoteSyncIO&);
76 virtual ~IRemoteAsyncIO () {}
77 virtual void asyncmethod() = 0;
82 IRemoteAsyncIO (const IRemoteAsyncIO&);
83 IRemoteAsyncIO& operator= (const IRemoteAsyncIO&);
86 class RemoteMpe : public IRemoteSyncIO, public IRemoteAsyncIO
89 virtual void syncmethod() {}
90 virtual void asyncmethod() {}