import source from 1.3.40
[external/swig.git] / Examples / test-suite / director_classes.i
1 // Tests classes passed by value, pointer and reference
2 // Note: C# module has a large runtime test
3
4 #pragma SWIG nowarn=SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR
5
6 %module(directors="1") director_classes
7
8 %feature("director") Base;
9 %feature("director") Derived;
10
11 %include "std_string.i"
12
13 %inline %{
14 #include <cstdio>
15 #include <iostream>
16
17
18 // Use for debugging
19 bool PrintDebug = false;
20
21
22 struct DoubleHolder
23 {
24   DoubleHolder(double v = 0.0) : val(v) {}
25   double val;
26 };
27
28 class Base {
29 protected:
30   double m_dd;
31 public:
32
33   Base(double dd) : m_dd(dd) {}
34   virtual ~Base() {}
35
36   virtual DoubleHolder Val(DoubleHolder x) { if (PrintDebug) std::cout << "Base - Val(" << x.val << ")" << std::endl; return x; }
37   virtual DoubleHolder& Ref(DoubleHolder& x) { if (PrintDebug) std::cout << "Base - Ref(" << x.val << ")" << std::endl; return x; }
38   virtual DoubleHolder* Ptr(DoubleHolder* x) { if (PrintDebug) std::cout << "Base - Ptr(" << x->val << ")" << std::endl; return x; }
39
40   virtual std::string FullyOverloaded(int x) { if (PrintDebug) std::cout << "Base - FullyOverloaded(int " << x << ")" << std::endl; return "Base::FullyOverloaded(int)"; }
41   virtual std::string FullyOverloaded(bool x) { if (PrintDebug) std::cout << "Base - FullyOverloaded(bool " << x << ")" << std::endl; return "Base::FullyOverloaded(bool)"; }
42
43   virtual std::string SemiOverloaded(int x) { if (PrintDebug) std::cout << "Base - SemiOverloaded(int " << x << ")" << std::endl; return "Base::SemiOverloaded(int)"; }
44   virtual std::string SemiOverloaded(bool x) { if (PrintDebug) std::cout << "Base - SemiOverloaded(bool " << x << ")" << std::endl; return "Base::SemiOverloaded(bool)"; }
45
46   virtual std::string DefaultParms(int x, double y = 1.1) {
47     if (PrintDebug) std::cout << "Base - DefaultParms(" << x << ", " << y << ")" << std::endl;
48     std::string ret("Base::DefaultParms(int");
49     if (y!=1.1)
50       ret = ret + std::string(", double");
51     ret = ret + std::string(")");
52     return ret;
53   }
54 };
55
56 class Derived : public Base {
57 public:
58   Derived(double dd) : Base(dd) {}
59   virtual ~Derived() {}
60
61   virtual DoubleHolder Val(DoubleHolder x) { if (PrintDebug) std::cout << "Derived - Val(" << x.val << ")" << std::endl; return x; }
62   virtual DoubleHolder& Ref(DoubleHolder& x) { if (PrintDebug) std::cout << "Derived - Ref(" << x.val << ")" << std::endl; return x; }
63   virtual DoubleHolder* Ptr(DoubleHolder* x) { if (PrintDebug) std::cout << "Derived - Ptr(" << x->val << ")" << std::endl; return x; }
64
65   virtual std::string FullyOverloaded(int x) { if (PrintDebug) std::cout << "Derived - FullyOverloaded(int " << x << ")" << std::endl; return "Derived::FullyOverloaded(int)"; }
66   virtual std::string FullyOverloaded(bool x) { if (PrintDebug) std::cout << "Derived - FullyOverloaded(bool " << x << ")" << std::endl; return "Derived::FullyOverloaded(bool)"; }
67
68   virtual std::string SemiOverloaded(int x) { if (PrintDebug) std::cout << "Derived - SemiOverloaded(int " << x << ")" << std::endl; return "Derived::SemiOverloaded(int)"; }
69   // No SemiOverloaded(bool x)
70
71   virtual std::string DefaultParms(int x, double y = 1.1) { 
72     if (PrintDebug) std::cout << "Derived - DefaultParms(" << x << ", " << y << ")" << std::endl;
73     std::string ret("Derived::DefaultParms(int");
74     if (y!=1.1)
75       ret = ret + std::string(", double");
76     ret = ret + std::string(")");
77     return ret;
78   }
79 };
80
81
82 class Caller {
83 private:
84   Base *m_base;
85   void delBase() { delete m_base; m_base = 0; }
86 public:
87   Caller(): m_base(0) {}
88   ~Caller() { delBase(); }
89   void set(Base *b) { delBase(); m_base = b; }
90   void reset() { m_base = 0; }
91
92   DoubleHolder ValCall(DoubleHolder x) { return m_base->Val(x); }
93   DoubleHolder& RefCall(DoubleHolder& x) { return m_base->Ref(x); }
94   DoubleHolder* PtrCall(DoubleHolder* x) { return m_base->Ptr(x); }
95   std::string FullyOverloadedCall(int x) { return m_base->FullyOverloaded(x); }
96   std::string FullyOverloadedCall(bool x) { return m_base->FullyOverloaded(x); }
97   std::string SemiOverloadedCall(int x) { return m_base->SemiOverloaded(x); }
98   std::string SemiOverloadedCall(bool x) { return m_base->SemiOverloaded(x); }
99   std::string DefaultParmsCall(int x) { return m_base->DefaultParms(x); }
100   std::string DefaultParmsCall(int x, double y) { return m_base->DefaultParms(x, y); }
101 };
102
103 %}
104