blob: 6380fa010c86f4e89d7b722cddcf26574ee65764 [file] [log] [blame]
%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);
}
}
}
%}