PageRenderTime 45ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/python/carrays.i

#
Swig | 53 lines | 38 code | 15 blank | 0 comment | 0 complexity | fb907954506446a48a82754d3e58be9f MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  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>