summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/python/carrays.i
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/python/carrays.i')
-rw-r--r--share/swig/2.0.11/python/carrays.i53
1 files changed, 53 insertions, 0 deletions
diff --git a/share/swig/2.0.11/python/carrays.i b/share/swig/2.0.11/python/carrays.i
new file mode 100644
index 0000000..e578c80
--- /dev/null
+++ b/share/swig/2.0.11/python/carrays.i
@@ -0,0 +1,53 @@
+%define %array_class(TYPE,NAME)
+#if defined(SWIGPYTHON_BUILTIN)
+ %feature("python:slot", "sq_item", functype="ssizeargfunc") NAME::__getitem__;
+ %feature("python:slot", "sq_ass_item", functype="ssizeobjargproc") NAME::__setitem__;
+
+%inline %{
+typedef struct {
+ TYPE *el;
+} NAME;
+%}
+
+%extend NAME {
+
+ NAME(size_t nelements) {
+ NAME *arr = %new_instance(NAME);
+ arr->el = %new_array(nelements, TYPE);
+ return arr;
+ }
+
+ ~NAME() {
+ %delete_array(self->el);
+ %delete(self);
+ }
+
+ TYPE __getitem__(size_t index) {
+ return self->el[index];
+ }
+
+ void __setitem__(size_t index, TYPE value) {
+ self->el[index] = value;
+ }
+
+ TYPE * cast() {
+ return self->el;
+ }
+
+ static NAME *frompointer(TYPE *t) {
+ return %reinterpret_cast(t, NAME *);
+ }
+};
+
+%types(NAME = TYPE);
+
+#else
+ %array_class_wrap(TYPE,NAME,__getitem__,__setitem__)
+#endif
+%enddef
+
+%include <typemaps/carrays.swg>
+
+
+
+