New example for Ruby that shows how to implement a mark function. Also makes use of the tracking objects funcitonality.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7519 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
42f840281d
commit
76c0388391
6 changed files with 343 additions and 0 deletions
37
SWIG/Examples/ruby/mark_function/example.i
Normal file
37
SWIG/Examples/ruby/mark_function/example.i
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
%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);
|
||||
}
|
||||
}
|
||||
}
|
||||
%}
|
||||
Loading…
Add table
Add a link
Reference in a new issue