mirror of https://github.com/swig/swig
124 lines
1.7 KiB
OpenEdge ABL
124 lines
1.7 KiB
OpenEdge ABL
%module refcount
|
|
|
|
%warnfilter(SWIGWARN_IGNORE_OPERATOR_EQ,SWIGWARN_LANG_IDENTIFIER);
|
|
|
|
%{
|
|
#include <iostream>
|
|
#include "refcount.h"
|
|
%}
|
|
|
|
//
|
|
// using the %refobject/%unrefobject directives you can activate the
|
|
// reference counting for RCObj and all its descendents at once
|
|
//
|
|
|
|
%refobject RCObj "$this->addref();"
|
|
%unrefobject RCObj "$this->delref();"
|
|
|
|
%include "refcount.h"
|
|
|
|
%newobject B::create(A* a);
|
|
%newobject global_create(A* a);
|
|
%newobject B::cloner();
|
|
%newobject Factory::create(A* a);
|
|
%newobject Factory::create2(A* a);
|
|
|
|
|
|
|
|
%inline %{
|
|
|
|
struct A : RCObj
|
|
{
|
|
A() {}
|
|
|
|
~A()
|
|
{
|
|
// std::cout << "deleting a" << std::endl;
|
|
}
|
|
|
|
#ifdef SWIGRUBY
|
|
// fix strange ruby + virtual derivation problem
|
|
using RCObjBase::ref_count;
|
|
#endif
|
|
};
|
|
|
|
struct A1 : A
|
|
{
|
|
protected:
|
|
A1() {}
|
|
};
|
|
|
|
struct A2 : A
|
|
{
|
|
};
|
|
|
|
struct A3 : A1, private A2
|
|
{
|
|
};
|
|
|
|
%}
|
|
|
|
#if defined(SWIGPYTHON)
|
|
%extend_smart_pointer(RCPtr<A>);
|
|
%template(RCPtr_A) RCPtr<A>;
|
|
#endif
|
|
|
|
%inline %{
|
|
|
|
struct B : RCObj
|
|
{
|
|
B(A* a) : _a(a) {}
|
|
|
|
A* get_a()
|
|
{
|
|
return _a;
|
|
}
|
|
|
|
static B* create(A* a)
|
|
{
|
|
return new B(a);
|
|
}
|
|
|
|
B* cloner()
|
|
{
|
|
return new B(_a);
|
|
}
|
|
|
|
~B()
|
|
{
|
|
// std::cout << "deleting b" << std::endl;
|
|
}
|
|
|
|
RCPtr<A> get_rca() {
|
|
return _a;
|
|
}
|
|
|
|
private:
|
|
RCPtr<A> _a;
|
|
};
|
|
|
|
struct B* global_create(A* a)
|
|
{
|
|
return new B(a);
|
|
}
|
|
|
|
struct Factory {
|
|
static B* create(A* a)
|
|
{
|
|
return new B(a);
|
|
}
|
|
B* create2(A* a)
|
|
{
|
|
return new B(a);
|
|
}
|
|
};
|
|
|
|
%}
|
|
|
|
#if defined(SWIGPYTHON) || defined(SWIGOCTAVE)
|
|
|
|
%include <std_vector.i>
|
|
%template(vector_A) std::vector<RCPtr<A> >;
|
|
|
|
#endif
|