/trunk/Examples/ruby/free_function/example.i
Swig | 41 lines | 21 code | 10 blank | 10 comment | 0 complexity | ea0d7f322373c8b3465a7828324f24a7 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- %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;
- }
- %}