mirror of https://github.com/swig/swig
42 lines
909 B
OpenEdge ABL
42 lines
909 B
OpenEdge ABL
%module example
|
|
|
|
%{
|
|
#include "example.h"
|
|
%}
|
|
|
|
/* Specify that ownership is transferred to the zoo
|
|
when calling add_animal */
|
|
%apply SWIGTYPE *DISOWN { Animal* animal };
|
|
|
|
/* Track objects */
|
|
%trackobjects;
|
|
|
|
/* Specify the mark function */
|
|
%freefunc Zoo "free_Zoo";
|
|
|
|
%include "example.h"
|
|
|
|
%header %{
|
|
static void free_Zoo(void* ptr) {
|
|
Zoo* zoo = (Zoo*) ptr;
|
|
|
|
/* Loop over each object and call SWIG_RubyRemoveTracking */
|
|
int count = zoo->get_num_animals();
|
|
|
|
for(int i = 0; i < count; ++i) {
|
|
/* Get an animal */
|
|
Animal* animal = zoo->get_animal(i);
|
|
/* Unlink the Ruby object from the C++ object */
|
|
SWIG_RubyUnlinkObjects(animal);
|
|
/* Now remove the tracking for this animal */
|
|
SWIG_RubyRemoveTracking(animal);
|
|
}
|
|
|
|
/* Now call SWIG_RubyRemoveTracking for the zoo */
|
|
SWIG_RubyRemoveTracking(ptr);
|
|
|
|
/* Now free the zoo which will free the animals it contains */
|
|
delete zoo;
|
|
}
|
|
%}
|