diff options
Diffstat (limited to 'Examples/test-suite/director_classes.i')
| -rw-r--r-- | Examples/test-suite/director_classes.i | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Examples/test-suite/director_classes.i b/Examples/test-suite/director_classes.i new file mode 100644 index 0000000..5d0a67d --- /dev/null +++ b/Examples/test-suite/director_classes.i @@ -0,0 +1,104 @@ +// Tests classes passed by value, pointer and reference +// Note: C# module has a large runtime test + +#pragma SWIG nowarn=SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR + +%module(directors="1") director_classes + +%feature("director") Base; +%feature("director") Derived; + +%include "std_string.i" + +%inline %{ +#include <cstdio> +#include <iostream> + + +// Use for debugging +bool PrintDebug = false; + + +struct DoubleHolder +{ + DoubleHolder(double v = 0.0) : val(v) {} + double val; +}; + +class Base { +protected: + double m_dd; +public: + + Base(double dd) : m_dd(dd) {} + virtual ~Base() {} + + virtual DoubleHolder Val(DoubleHolder x) { if (PrintDebug) std::cout << "Base - Val(" << x.val << ")" << std::endl; return x; } + virtual DoubleHolder& Ref(DoubleHolder& x) { if (PrintDebug) std::cout << "Base - Ref(" << x.val << ")" << std::endl; return x; } + virtual DoubleHolder* Ptr(DoubleHolder* x) { if (PrintDebug) std::cout << "Base - Ptr(" << x->val << ")" << std::endl; return x; } + + virtual std::string FullyOverloaded(int x) { if (PrintDebug) std::cout << "Base - FullyOverloaded(int " << x << ")" << std::endl; return "Base::FullyOverloaded(int)"; } + virtual std::string FullyOverloaded(bool x) { if (PrintDebug) std::cout << "Base - FullyOverloaded(bool " << x << ")" << std::endl; return "Base::FullyOverloaded(bool)"; } + + virtual std::string SemiOverloaded(int x) { if (PrintDebug) std::cout << "Base - SemiOverloaded(int " << x << ")" << std::endl; return "Base::SemiOverloaded(int)"; } + virtual std::string SemiOverloaded(bool x) { if (PrintDebug) std::cout << "Base - SemiOverloaded(bool " << x << ")" << std::endl; return "Base::SemiOverloaded(bool)"; } + + virtual std::string DefaultParms(int x, double y = 1.1) { + if (PrintDebug) std::cout << "Base - DefaultParms(" << x << ", " << y << ")" << std::endl; + std::string ret("Base::DefaultParms(int"); + if (y!=1.1) + ret = ret + std::string(", double"); + ret = ret + std::string(")"); + return ret; + } +}; + +class Derived : public Base { +public: + Derived(double dd) : Base(dd) {} + virtual ~Derived() {} + + virtual DoubleHolder Val(DoubleHolder x) { if (PrintDebug) std::cout << "Derived - Val(" << x.val << ")" << std::endl; return x; } + virtual DoubleHolder& Ref(DoubleHolder& x) { if (PrintDebug) std::cout << "Derived - Ref(" << x.val << ")" << std::endl; return x; } + virtual DoubleHolder* Ptr(DoubleHolder* x) { if (PrintDebug) std::cout << "Derived - Ptr(" << x->val << ")" << std::endl; return x; } + + virtual std::string FullyOverloaded(int x) { if (PrintDebug) std::cout << "Derived - FullyOverloaded(int " << x << ")" << std::endl; return "Derived::FullyOverloaded(int)"; } + virtual std::string FullyOverloaded(bool x) { if (PrintDebug) std::cout << "Derived - FullyOverloaded(bool " << x << ")" << std::endl; return "Derived::FullyOverloaded(bool)"; } + + virtual std::string SemiOverloaded(int x) { if (PrintDebug) std::cout << "Derived - SemiOverloaded(int " << x << ")" << std::endl; return "Derived::SemiOverloaded(int)"; } + // No SemiOverloaded(bool x) + + virtual std::string DefaultParms(int x, double y = 1.1) { + if (PrintDebug) std::cout << "Derived - DefaultParms(" << x << ", " << y << ")" << std::endl; + std::string ret("Derived::DefaultParms(int"); + if (y!=1.1) + ret = ret + std::string(", double"); + ret = ret + std::string(")"); + return ret; + } +}; + + +class Caller { +private: + Base *m_base; + void delBase() { delete m_base; m_base = 0; } +public: + Caller(): m_base(0) {} + ~Caller() { delBase(); } + void set(Base *b) { delBase(); m_base = b; } + void reset() { m_base = 0; } + + DoubleHolder ValCall(DoubleHolder x) { return m_base->Val(x); } + DoubleHolder& RefCall(DoubleHolder& x) { return m_base->Ref(x); } + DoubleHolder* PtrCall(DoubleHolder* x) { return m_base->Ptr(x); } + std::string FullyOverloadedCall(int x) { return m_base->FullyOverloaded(x); } + std::string FullyOverloadedCall(bool x) { return m_base->FullyOverloaded(x); } + std::string SemiOverloadedCall(int x) { return m_base->SemiOverloaded(x); } + std::string SemiOverloadedCall(bool x) { return m_base->SemiOverloaded(x); } + std::string DefaultParmsCall(int x) { return m_base->DefaultParms(x); } + std::string DefaultParmsCall(int x, double y) { return m_base->DefaultParms(x, y); } +}; + +%} + |
