PageRenderTime 55ms CodeModel.GetById 37ms app.highlight 1ms RepoModel.GetById 0ms app.codeStats 0ms

/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%}