PageRenderTime 24ms CodeModel.GetById 20ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Examples/ruby/mark_function/example.i

#
Swig | 37 lines | 21 code | 10 blank | 6 comment | 0 complexity | c55052dcf2e7ece627918d598dc005cd MD5 | raw file
 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%}