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