mirror of https://github.com/swig/swig
38 lines
753 B
OpenEdge ABL
38 lines
753 B
OpenEdge ABL
%module example
|
|
|
|
%{
|
|
#include "example.h"
|
|
%}
|
|
|
|
/* Tell SWIG that create_animal creates a new object */
|
|
%newobject Zoo::create_animal;
|
|
|
|
/* Keep track of mappings between C/C++ structs/classes
|
|
and Ruby objects so we can implement a mark function. */
|
|
%trackobjects;
|
|
|
|
|
|
/* Specify the mark function */
|
|
%markfunc Zoo "mark_Zoo";
|
|
|
|
%include "example.h"
|
|
|
|
%header %{
|
|
static void mark_Zoo(void* ptr) {
|
|
Zoo* zoo = (Zoo*) ptr;
|
|
|
|
/* Loop over each object and tell the garbage collector
|
|
that we are holding a reference to them. */
|
|
int count = zoo->get_num_animals();
|
|
|
|
for(int i = 0; i < count; ++i) {
|
|
Animal* animal = zoo->get_animal(i);
|
|
VALUE object = SWIG_RubyInstanceFor(animal);
|
|
|
|
if (object != Qnil) {
|
|
rb_gc_mark(object);
|
|
}
|
|
}
|
|
}
|
|
%}
|