dwww Home | Show directory contents | Find package

%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);
                        }
                }
        }
%}

Generated by dwww version 1.15 on Tue Jul 2 00:16:24 CEST 2024.