/tags/rel-1-3-26/SWIG/Examples/ruby/mark_function/example.i
Swig | 37 lines | 21 code | 10 blank | 6 comment | 0 complexity | c55052dcf2e7ece627918d598dc005cd MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
1%module example 2 3%{ 4#include "example.h" 5%} 6 7/* Tell SWIG that create_animal creates a new object */ 8%newobject Zoo::create_animal; 9 10/* Keep track of mappings between C/C++ structs/classes 11 and Ruby objects so we can implement a mark function. */ 12%trackobjects; 13 14 15/* Specify the mark function */ 16%markfunc Zoo "mark_Zoo"; 17 18%include "example.h" 19 20%header %{ 21 static void mark_Zoo(void* ptr) { 22 Zoo* zoo = (Zoo*) ptr; 23 24 /* Loop over each object and tell the garbage collector 25 that we are holding a reference to them. */ 26 int count = zoo->get_num_animals(); 27 28 for(int i = 0; i < count; ++i) { 29 Animal* animal = zoo->get_animal(i); 30 VALUE object = SWIG_RubyInstanceFor(animal); 31 32 if (object != Qnil) { 33 rb_gc_mark(object); 34 } 35 } 36 } 37%}