Upstream version 1.3.40
[profile/ivi/swig.git] / Examples / test-suite / java_director.i
1 /*
2  * Test Java director typemaps and features
3  */
4
5 %warnfilter(SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR); /* Thread/reentrant unsafe wrapping, consider returning by value instead. */
6
7 %module(directors="1") java_director
8
9 %typemap(javafinalize) SWIGTYPE %{
10   protected void finalize() {
11 //    System.out.println("Finalizing " + this);
12     delete();
13   }
14 %}
15
16
17 %{
18 #include <string>
19 #include <vector>
20
21 class Quux {
22 public:
23         Quux() : memb_("default Quux ctor arg") {instances_++; }
24         Quux(const std::string &arg) : memb_(arg) {instances_++;}
25         Quux(const Quux &src) : memb_(src.memb_) {instances_++;}
26         virtual ~Quux() {instances_--;}
27         virtual const std::string &director_method() { return memb_; }
28         const std::string &member() { return memb_; }
29         static int instances() { return instances_; }
30 private:
31         static int instances_;
32         std::string memb_;
33 };
34
35 int Quux::instances_ = 0;
36
37 class QuuxContainer {
38 protected:
39         typedef std::vector<Quux *> quuxvec_t;
40 public:
41         QuuxContainer() : quuxen_()
42         { }
43         ~QuuxContainer() {
44           for (quuxvec_t::iterator iter = quuxen_.begin(); iter != quuxen_.end(); ++iter) {
45             delete *iter;
46           }
47           quuxen_.clear();
48         }
49         void push(Quux *elem) {
50           quuxen_.push_back(elem);
51         }
52         Quux *get(int idx) {
53           return quuxen_[idx];
54         }
55         const std::string &invoke(int idx) {
56           return quuxen_[idx]->director_method();
57         }
58         size_t size() {
59           return quuxen_.size();
60         }
61 private:
62         quuxvec_t quuxen_;
63 };
64 %}
65
66 %include "std_string.i"
67
68 %feature("director") Quux;
69 SWIG_DIRECTOR_OWNED(Quux)
70
71 class Quux {
72 public:
73         Quux();
74         Quux(const std::string &arg);
75         Quux(const Quux &src);
76         virtual ~Quux();
77         virtual const std::string &director_method();
78         const std::string &member();
79         static int instances();
80 };
81
82 class QuuxContainer {
83 public:
84         QuuxContainer();
85         ~QuuxContainer();
86         void push(Quux *elem);
87         Quux *get(int idx);
88         const std::string &invoke(int idx);
89         size_t size();
90 };
91
92
93 %feature("director");
94
95 %typemap(javacode) hi::Quux1 %{
96   public boolean disconnectMethodCalled = false;
97 %}
98
99 %typemap(directordisconnect, methodname="disconnect_director") hi::Quux1 %{
100   public void $methodname() {
101     swigCMemOwn = false;
102     $jnicall;
103     // add in a flag to check this method is really called
104     disconnectMethodCalled = true;
105   }
106 %}
107
108 %inline %{
109
110 namespace hi  {
111   struct Quux1 : public Quux {
112     Quux1(const std::string& arg) : Quux(arg) {}
113     virtual int ff(int i = 0) {return i;}  
114   };
115 }
116  
117 struct JObjectTest {
118   virtual ~JObjectTest() {}
119   // Test special Java JNI type jobject
120   virtual jobject foo(jobject x) { return x; }
121 };
122
123 %}
124