diff options
| author | William S Fulton <wsf@fultondesigns.co.uk> | 2010-06-02 20:53:17 +0000 |
|---|---|---|
| committer | William S Fulton <wsf@fultondesigns.co.uk> | 2010-06-02 20:53:17 +0000 |
| commit | 2824b0cbb66e715490e1ef13250bd675d87b32d9 (patch) | |
| tree | c3bc8d54c6d73f2b7ce08cac34172dbc9f5e5b95 /trunk/Examples/ruby/free_function/example.i | |
| parent | 289cfef4b4766ff266f3b1bdda8ca3a952e5a047 (diff) | |
| download | swig-2.0.0.tar.gz | |
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/tags/rel-2.0.0@12089 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'trunk/Examples/ruby/free_function/example.i')
| -rw-r--r-- | trunk/Examples/ruby/free_function/example.i | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/trunk/Examples/ruby/free_function/example.i b/trunk/Examples/ruby/free_function/example.i new file mode 100644 index 000000000..a446b3f99 --- /dev/null +++ b/trunk/Examples/ruby/free_function/example.i @@ -0,0 +1,41 @@ +%module example + +%{ +#include "example.h" +%} + +/* Specify that ownership is transferred to the zoo + when calling add_animal */ +%apply SWIGTYPE *DISOWN { Animal* animal }; + +/* Track objects */ +%trackobjects; + +/* Specify the mark function */ +%freefunc Zoo "free_Zoo"; + +%include "example.h" + +%header %{ + static void free_Zoo(void* ptr) { + Zoo* zoo = (Zoo*) ptr; + + /* Loop over each object and call SWIG_RubyRemoveTracking */ + int count = zoo->get_num_animals(); + + for(int i = 0; i < count; ++i) { + /* Get an animal */ + Animal* animal = zoo->get_animal(i); + /* Unlink the Ruby object from the C++ object */ + SWIG_RubyUnlinkObjects(animal); + /* Now remove the tracking for this animal */ + SWIG_RubyRemoveTracking(animal); + } + + /* Now call SWIG_RubyRemoveTracking for the zoo */ + SWIG_RubyRemoveTracking(ptr); + + /* Now free the zoo which will free the animals it contains */ + delete zoo; + } +%} |
