Home | History | Annotate | Download | only in python
      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 
      6 %inline %{
      7 typedef struct {
      8     TYPE *el;
      9 } NAME;
     10 %}
     11 
     12 %extend NAME {
     13 
     14   NAME(size_t nelements) {
     15       NAME *arr = %new_instance(NAME);
     16       arr->el = %new_array(nelements, TYPE);
     17       return arr;
     18   }
     19 
     20   ~NAME() {
     21       %delete_array(self->el);
     22       %delete(self);
     23   }
     24 
     25   TYPE __getitem__(size_t index) {
     26       return self->el[index];
     27   }
     28 
     29   void __setitem__(size_t index, TYPE value) {
     30       self->el[index] = value;
     31   }
     32 
     33   TYPE * cast() {
     34       return self->el;
     35   }
     36 
     37   static NAME *frompointer(TYPE *t) {
     38       return %reinterpret_cast(t, NAME *);
     39   }
     40 };
     41 
     42 %types(NAME = TYPE);
     43 
     44 #else
     45   %array_class_wrap(TYPE,NAME,__getitem__,__setitem__)
     46 #endif
     47 %enddef
     48 
     49 %include <typemaps/carrays.swg>
     50 
     51 
     52 
     53 
     54