diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/ruby/mark_function/example.i | |
download | swig-tarball-master.tar.gz |
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Examples/ruby/mark_function/example.i')
-rw-r--r-- | Examples/ruby/mark_function/example.i | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/Examples/ruby/mark_function/example.i b/Examples/ruby/mark_function/example.i new file mode 100644 index 0000000..6380fa0 --- /dev/null +++ b/Examples/ruby/mark_function/example.i @@ -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); + } + } + } +%} |