~ubuntu-branches/ubuntu/maverick/swig1.3/maverick

« back to all changes in this revision

Viewing changes to Examples/test-suite/java_director.i

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-12-05 01:16:04 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051205011604-ygx904it6413k3go
Tags: 1.3.27-1ubuntu1
Resynchronise with Debian again, for the new subversion packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Test Java director typemaps and features
 
3
 */
 
4
 
 
5
%warnfilter(470); /* 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
        int 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
        int 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
 
 
118
%}
 
119