PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/ruby/mark_function/example.i

#
Swig | 37 lines | 21 code | 10 blank | 6 comment | 0 complexity | c55052dcf2e7ece627918d598dc005cd MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. %module example
  2. %{
  3. #include "example.h"
  4. %}
  5. /* Tell SWIG that create_animal creates a new object */
  6. %newobject Zoo::create_animal;
  7. /* Keep track of mappings between C/C++ structs/classes
  8. and Ruby objects so we can implement a mark function. */
  9. %trackobjects;
  10. /* Specify the mark function */
  11. %markfunc Zoo "mark_Zoo";
  12. %include "example.h"
  13. %header %{
  14. static void mark_Zoo(void* ptr) {
  15. Zoo* zoo = (Zoo*) ptr;
  16. /* Loop over each object and tell the garbage collector
  17. that we are holding a reference to them. */
  18. int count = zoo->get_num_animals();
  19. for(int i = 0; i < count; ++i) {
  20. Animal* animal = zoo->get_animal(i);
  21. VALUE object = SWIG_RubyInstanceFor(animal);
  22. if (object != Qnil) {
  23. rb_gc_mark(object);
  24. }
  25. }
  26. }
  27. %}