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