mirror of https://github.com/swig/swig
134 lines
2.7 KiB
OpenEdge ABL
134 lines
2.7 KiB
OpenEdge ABL
/*
|
|
* 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 %{
|
|
@SuppressWarnings({"deprecation", "removal"})
|
|
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; }
|
|
};
|
|
|
|
%}
|
|
|
|
%javaexception("Exception") etest "$action"
|
|
%inline %{
|
|
struct JavaExceptionTest {
|
|
virtual ~JavaExceptionTest() {}
|
|
virtual void etest() {}
|
|
};
|
|
%}
|
|
|