| %module minherit2 |
| |
| // A multiple inheritance example, mainly for Java, C# and D. |
| // The example shows how it is possible to turn C++ abstract base classes into |
| // Java/C#/D interfaces. |
| // In the future, all this trouble might be more automated. |
| |
| %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE, |
| SWIGWARN_CSHARP_MULTIPLE_INHERITANCE, |
| SWIGWARN_D_MULTIPLE_INHERITANCE, |
| SWIGWARN_RUBY_MULTIPLE_INHERITANCE, |
| SWIGWARN_PHP_MULTIPLE_INHERITANCE) RemoteMpe; |
| |
| |
| #if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGD) |
| |
| #if defined(SWIGCSHARP) |
| #define javaclassmodifiers csclassmodifiers |
| #define javabody csbody |
| #define javafinalize csdispose |
| #define javadestruct csdisposing |
| #define javaout csout |
| #define javainterfaces csinterfaces |
| #define javabase csbase |
| #endif |
| |
| #if defined(SWIGD) |
| #define javaclassmodifiers dclassmodifiers |
| #define javabody dbody |
| #define javafinalize ddestructor |
| #define javadestruct ddispose |
| #define javaout dout |
| #define javainterfaces dinterfaces |
| #define javabase dbase |
| |
| %typemap(dimports) RemoteMpe %{ |
| $importtype(IRemoteSyncIO) |
| $importtype(IRemoteAsyncIO) |
| %} |
| #endif |
| |
| // Modify multiple inherited base classes into inheriting interfaces |
| %typemap(javainterfaces) RemoteMpe "IRemoteSyncIO, IRemoteAsyncIO" |
| %typemap(javabase, replace="1") RemoteMpe "" |
| |
| // Turn the proxy class into an interface |
| %typemap(javaclassmodifiers) IRemoteSyncIO "public interface" |
| %typemap(javaclassmodifiers) IRemoteAsyncIO "public interface" |
| %typemap(javabody) IRemoteSyncIO "" |
| %typemap(javabody) IRemoteAsyncIO "" |
| %typemap(javafinalize) IRemoteSyncIO "" |
| %typemap(javafinalize) IRemoteAsyncIO "" |
| %typemap(javadestruct) IRemoteSyncIO "" |
| %typemap(javadestruct) IRemoteAsyncIO "" |
| |
| // Turn the methods into abstract methods |
| %typemap(javaout) void IRemoteSyncIO::syncmethod ";" |
| %typemap(javaout) void IRemoteAsyncIO::asyncmethod ";" |
| #if defined(SWIGJAVA) |
| %javamethodmodifiers IRemoteSyncIO::syncmethod "abstract public"; |
| %javamethodmodifiers IRemoteAsyncIO::asyncmethod "abstract public"; |
| // Features are inherited by derived classes, so override this |
| %javamethodmodifiers RemoteMpe::syncmethod "public" |
| %javamethodmodifiers RemoteMpe::asyncmethod "public" |
| #elif defined(SWIGCSHARP) |
| %csmethodmodifiers IRemoteSyncIO::syncmethod ""; |
| %csmethodmodifiers IRemoteAsyncIO::asyncmethod ""; |
| // Features are inherited by derived classes, so override this |
| %csmethodmodifiers RemoteMpe::syncmethod "public" |
| %csmethodmodifiers RemoteMpe::asyncmethod "public" |
| #elif defined(SWIGD) |
| %dmethodmodifiers IRemoteSyncIO::syncmethod ""; |
| %dmethodmodifiers IRemoteAsyncIO::asyncmethod ""; |
| // Features are inherited by derived classes, so override this |
| %dmethodmodifiers RemoteMpe::syncmethod "public" |
| %dmethodmodifiers RemoteMpe::asyncmethod "public" |
| #endif |
| |
| #endif |
| |
| |
| %inline %{ |
| class IRemoteSyncIO |
| { |
| public: |
| virtual ~IRemoteSyncIO () {} |
| virtual void syncmethod() = 0; |
| protected: |
| IRemoteSyncIO () {} |
| |
| private: |
| IRemoteSyncIO (const IRemoteSyncIO&); |
| IRemoteSyncIO& operator= (const IRemoteSyncIO&); |
| }; |
| |
| class IRemoteAsyncIO |
| { |
| public: |
| virtual ~IRemoteAsyncIO () {} |
| virtual void asyncmethod() = 0; |
| protected: |
| IRemoteAsyncIO () {} |
| |
| private: |
| IRemoteAsyncIO (const IRemoteAsyncIO&); |
| IRemoteAsyncIO& operator= (const IRemoteAsyncIO&); |
| }; |
| |
| class RemoteMpe : public IRemoteSyncIO, public IRemoteAsyncIO |
| { |
| public: |
| virtual void syncmethod() {} |
| virtual void asyncmethod() {} |
| }; |
| |
| %} |
| |