diff options
| author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
|---|---|---|
| committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
| commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
| tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/test-suite/java_director.i | |
| download | swig-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.i | 124 |
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; } +}; + +%} + |
