summaryrefslogtreecommitdiff
path: root/Examples/test-suite/java_director.i
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2009-08-18 20:56:02 +0000
committerLorry <lorry@roadtrain.codethink.co.uk>2012-09-25 16:59:08 +0000
commit9f8a09ed743cedd9547bf0661d518647966ab114 (patch)
tree9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/test-suite/java_director.i
downloadswig-tarball-master.tar.gz
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Examples/test-suite/java_director.i')
-rw-r--r--Examples/test-suite/java_director.i124
1 files changed, 124 insertions, 0 deletions
diff --git a/Examples/test-suite/java_director.i b/Examples/test-suite/java_director.i
new file mode 100644
index 0000000..04d55e1
--- /dev/null
+++ b/Examples/test-suite/java_director.i
@@ -0,0 +1,124 @@
+/*
+ * Test Java director typemaps and features
+ */
+
+%warnfilter(SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR); /* Thread/reentrant unsafe wrapping, consider returning by value instead. */
+
+%module(directors="1") java_director
+
+%typemap(javafinalize) SWIGTYPE %{
+ protected void finalize() {
+// System.out.println("Finalizing " + this);
+ delete();
+ }
+%}
+
+
+%{
+#include <string>
+#include <vector>
+
+class Quux {
+public:
+ Quux() : memb_("default Quux ctor arg") {instances_++; }
+ Quux(const std::string &arg) : memb_(arg) {instances_++;}
+ Quux(const Quux &src) : memb_(src.memb_) {instances_++;}
+ virtual ~Quux() {instances_--;}
+ virtual const std::string &director_method() { return memb_; }
+ const std::string &member() { return memb_; }
+ static int instances() { return instances_; }
+private:
+ static int instances_;
+ std::string memb_;
+};
+
+int Quux::instances_ = 0;
+
+class QuuxContainer {
+protected:
+ typedef std::vector<Quux *> quuxvec_t;
+public:
+ QuuxContainer() : quuxen_()
+ { }
+ ~QuuxContainer() {
+ for (quuxvec_t::iterator iter = quuxen_.begin(); iter != quuxen_.end(); ++iter) {
+ delete *iter;
+ }
+ quuxen_.clear();
+ }
+ void push(Quux *elem) {
+ quuxen_.push_back(elem);
+ }
+ Quux *get(int idx) {
+ return quuxen_[idx];
+ }
+ const std::string &invoke(int idx) {
+ return quuxen_[idx]->director_method();
+ }
+ size_t size() {
+ return quuxen_.size();
+ }
+private:
+ quuxvec_t quuxen_;
+};
+%}
+
+%include "std_string.i"
+
+%feature("director") Quux;
+SWIG_DIRECTOR_OWNED(Quux)
+
+class Quux {
+public:
+ Quux();
+ Quux(const std::string &arg);
+ Quux(const Quux &src);
+ virtual ~Quux();
+ virtual const std::string &director_method();
+ const std::string &member();
+ static int instances();
+};
+
+class QuuxContainer {
+public:
+ QuuxContainer();
+ ~QuuxContainer();
+ void push(Quux *elem);
+ Quux *get(int idx);
+ const std::string &invoke(int idx);
+ size_t size();
+};
+
+
+%feature("director");
+
+%typemap(javacode) hi::Quux1 %{
+ public boolean disconnectMethodCalled = false;
+%}
+
+%typemap(directordisconnect, methodname="disconnect_director") hi::Quux1 %{
+ public void $methodname() {
+ swigCMemOwn = false;
+ $jnicall;
+ // add in a flag to check this method is really called
+ disconnectMethodCalled = true;
+ }
+%}
+
+%inline %{
+
+namespace hi {
+ struct Quux1 : public Quux {
+ Quux1(const std::string& arg) : Quux(arg) {}
+ virtual int ff(int i = 0) {return i;}
+ };
+}
+
+struct JObjectTest {
+ virtual ~JObjectTest() {}
+ // Test special Java JNI type jobject
+ virtual jobject foo(jobject x) { return x; }
+};
+
+%}
+