PageRenderTime 39ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/inherit_target_language.i

#
Swig | 79 lines | 62 code | 17 blank | 0 comment | 0 complexity | 3bd732bf020d970a5398054a17a1540c MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. // Test using a target language specified base class, primarily for Java/C#/D and possibly other single inheritance languages
  2. // Note the multiple inheritance warnings don't appear because of the two techniques used in here: typemaps and %ignore
  3. %module inherit_target_language
  4. #if defined(SWIGJAVA)
  5. # define csbase javabase
  6. #elif defined(SWIGD)
  7. # define csbase dbase
  8. #endif
  9. %pragma(csharp) moduleimports=%{
  10. using System;
  11. using System.Runtime.InteropServices;
  12. public class TargetLanguageBase { public virtual void targetLanguageBaseMethod() {} };
  13. public class TargetLanguageBase2 { public virtual void targetLanguageBase2Method() {} };
  14. %}
  15. %pragma(java) moduleimports=%{
  16. class TargetLanguageBase { public void targetLanguageBaseMethod() {} };
  17. class TargetLanguageBase2 { public void targetLanguageBase2Method() {} };
  18. %}
  19. %pragma(d) globalproxyimports=%{
  20. private class TargetLanguageBase { public void targetLanguageBaseMethod() {} };
  21. private class TargetLanguageBase2 { public void targetLanguageBase2Method() {} };
  22. %}
  23. %typemap(csbase) SWIGTYPE "TargetLanguageBase"
  24. // Two ways to replace a C++ base with a completely different target language base
  25. %ignore Base1; // another way to use the target language base
  26. %typemap(csbase, replace="1") Derived2 "TargetLanguageBase"
  27. %inline %{
  28. struct Base1 { virtual ~Base1() {} };
  29. struct Base2 { virtual ~Base2() {} };
  30. struct Derived1 : Base1 {};
  31. struct Derived2 : Base2 {};
  32. %}
  33. // Multiple inheritance
  34. %ignore MBase1a;
  35. %ignore MBase1b;
  36. %typemap(csbase, replace="1") MultipleDerived2 "TargetLanguageBase"
  37. %inline %{
  38. struct MBase1a { virtual ~MBase1a() {} virtual void a() {} };
  39. struct MBase1b { virtual ~MBase1b() {} virtual void b() {} };
  40. struct MBase2a { virtual ~MBase2a() {} virtual void c() {} };
  41. struct MBase2b { virtual ~MBase2b() {} virtual void d() {} };
  42. struct MultipleDerived1 : MBase1a, MBase1b {};
  43. struct MultipleDerived2 : MBase1a, MBase2b {};
  44. %}
  45. %ignore MBase3a;
  46. %ignore MBase4b;
  47. %typemap(csbase) MultipleDerived3 ""
  48. %typemap(csbase) MultipleDerived4 ""
  49. %inline %{
  50. struct MBase3a { virtual ~MBase3a() {} virtual void e() {} };
  51. struct MBase3b { virtual ~MBase3b() {} virtual void f() {} };
  52. struct MBase4a { virtual ~MBase4a() {} virtual void g() {} };
  53. struct MBase4b { virtual ~MBase4b() {} virtual void h() {} };
  54. struct MultipleDerived3 : MBase3a, MBase3b {};
  55. struct MultipleDerived4 : MBase4a, MBase4b {};
  56. %}
  57. // Replace a C++ base, but only classes that do not have a C++ base
  58. %typemap(csbase, notderived="1") SWIGTYPE "TargetLanguageBase2"
  59. %inline %{
  60. struct BaseX { virtual ~BaseX() {}; void basex() {} };
  61. struct DerivedX : BaseX { void derivedx() {} };
  62. %}