carrays.i 932 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. %define %array_class(TYPE,NAME)
  2. #if defined(SWIGPYTHON_BUILTIN)
  3. %feature("python:slot", "sq_item", functype="ssizeargfunc") NAME::__getitem__;
  4. %feature("python:slot", "sq_ass_item", functype="ssizeobjargproc") NAME::__setitem__;
  5. %inline %{
  6. typedef struct {
  7. TYPE *el;
  8. } NAME;
  9. %}
  10. %extend NAME {
  11. NAME(size_t nelements) {
  12. NAME *arr = %new_instance(NAME);
  13. arr->el = %new_array(nelements, TYPE);
  14. return arr;
  15. }
  16. ~NAME() {
  17. %delete_array(self->el);
  18. %delete(self);
  19. }
  20. TYPE __getitem__(size_t index) {
  21. return self->el[index];
  22. }
  23. void __setitem__(size_t index, TYPE value) {
  24. self->el[index] = value;
  25. }
  26. TYPE * cast() {
  27. return self->el;
  28. }
  29. static NAME *frompointer(TYPE *t) {
  30. return %reinterpret_cast(t, NAME *);
  31. }
  32. };
  33. %types(NAME = TYPE);
  34. #else
  35. %array_class_wrap(TYPE,NAME,__getitem__,__setitem__)
  36. #endif
  37. %enddef
  38. %include <typemaps/carrays.swg>