PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

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

#
Swig | 110 lines | 84 code | 26 blank | 0 comment | 0 complexity | af5d717fdbaf54a8855af257d34ef6c7 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. // Tests classes passed by value, pointer and reference
  2. // Note: C# module has a large runtime test
  3. #pragma SWIG nowarn=SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR
  4. %module(directors="1") director_classes
  5. %feature("director") Base;
  6. %feature("director") Derived;
  7. %include "std_string.i"
  8. %{
  9. #if defined(__SUNPRO_CC)
  10. #pragma error_messages (off, hidevf)
  11. #endif
  12. %}
  13. %inline %{
  14. #include <cstdio>
  15. #include <iostream>
  16. // Use for debugging
  17. bool PrintDebug = false;
  18. struct DoubleHolder
  19. {
  20. DoubleHolder(double v = 0.0) : val(v) {}
  21. double val;
  22. };
  23. class Base {
  24. protected:
  25. double m_dd;
  26. public:
  27. Base(double dd) : m_dd(dd) {}
  28. virtual ~Base() {}
  29. virtual DoubleHolder Val(DoubleHolder x) { if (PrintDebug) std::cout << "Base - Val(" << x.val << ")" << std::endl; return x; }
  30. virtual DoubleHolder& Ref(DoubleHolder& x) { if (PrintDebug) std::cout << "Base - Ref(" << x.val << ")" << std::endl; return x; }
  31. virtual DoubleHolder* Ptr(DoubleHolder* x) { if (PrintDebug) std::cout << "Base - Ptr(" << x->val << ")" << std::endl; return x; }
  32. virtual std::string FullyOverloaded(int x) { if (PrintDebug) std::cout << "Base - FullyOverloaded(int " << x << ")" << std::endl; return "Base::FullyOverloaded(int)"; }
  33. virtual std::string FullyOverloaded(bool x) { if (PrintDebug) std::cout << "Base - FullyOverloaded(bool " << x << ")" << std::endl; return "Base::FullyOverloaded(bool)"; }
  34. virtual std::string SemiOverloaded(int x) { if (PrintDebug) std::cout << "Base - SemiOverloaded(int " << x << ")" << std::endl; return "Base::SemiOverloaded(int)"; }
  35. virtual std::string SemiOverloaded(bool x) { if (PrintDebug) std::cout << "Base - SemiOverloaded(bool " << x << ")" << std::endl; return "Base::SemiOverloaded(bool)"; }
  36. virtual std::string DefaultParms(int x, double y = 1.1) {
  37. if (PrintDebug) std::cout << "Base - DefaultParms(" << x << ", " << y << ")" << std::endl;
  38. std::string ret("Base::DefaultParms(int");
  39. if (y!=1.1)
  40. ret = ret + std::string(", double");
  41. ret = ret + std::string(")");
  42. return ret;
  43. }
  44. };
  45. class Derived : public Base {
  46. public:
  47. Derived(double dd) : Base(dd) {}
  48. virtual ~Derived() {}
  49. virtual DoubleHolder Val(DoubleHolder x) { if (PrintDebug) std::cout << "Derived - Val(" << x.val << ")" << std::endl; return x; }
  50. virtual DoubleHolder& Ref(DoubleHolder& x) { if (PrintDebug) std::cout << "Derived - Ref(" << x.val << ")" << std::endl; return x; }
  51. virtual DoubleHolder* Ptr(DoubleHolder* x) { if (PrintDebug) std::cout << "Derived - Ptr(" << x->val << ")" << std::endl; return x; }
  52. virtual std::string FullyOverloaded(int x) { if (PrintDebug) std::cout << "Derived - FullyOverloaded(int " << x << ")" << std::endl; return "Derived::FullyOverloaded(int)"; }
  53. virtual std::string FullyOverloaded(bool x) { if (PrintDebug) std::cout << "Derived - FullyOverloaded(bool " << x << ")" << std::endl; return "Derived::FullyOverloaded(bool)"; }
  54. virtual std::string SemiOverloaded(int x) { if (PrintDebug) std::cout << "Derived - SemiOverloaded(int " << x << ")" << std::endl; return "Derived::SemiOverloaded(int)"; }
  55. // No SemiOverloaded(bool x)
  56. virtual std::string DefaultParms(int x, double y = 1.1) {
  57. if (PrintDebug) std::cout << "Derived - DefaultParms(" << x << ", " << y << ")" << std::endl;
  58. std::string ret("Derived::DefaultParms(int");
  59. if (y!=1.1)
  60. ret = ret + std::string(", double");
  61. ret = ret + std::string(")");
  62. return ret;
  63. }
  64. };
  65. class Caller {
  66. private:
  67. Base *m_base;
  68. void delBase() { delete m_base; m_base = 0; }
  69. public:
  70. Caller(): m_base(0) {}
  71. ~Caller() { delBase(); }
  72. void set(Base *b) { delBase(); m_base = b; }
  73. void reset() { m_base = 0; }
  74. DoubleHolder ValCall(DoubleHolder x) { return m_base->Val(x); }
  75. DoubleHolder& RefCall(DoubleHolder& x) { return m_base->Ref(x); }
  76. DoubleHolder* PtrCall(DoubleHolder* x) { return m_base->Ptr(x); }
  77. std::string FullyOverloadedCall(int x) { return m_base->FullyOverloaded(x); }
  78. std::string FullyOverloadedCall(bool x) { return m_base->FullyOverloaded(x); }
  79. std::string SemiOverloadedCall(int x) { return m_base->SemiOverloaded(x); }
  80. std::string SemiOverloadedCall(bool x) { return m_base->SemiOverloaded(x); }
  81. std::string DefaultParmsCall(int x) { return m_base->DefaultParms(x); }
  82. std::string DefaultParmsCall(int x, double y) { return m_base->DefaultParms(x, y); }
  83. };
  84. %}