Index: swig/Lib/typemaps/carrays.swg |
=================================================================== |
--- swig/Lib/typemaps/carrays.swg (revision 0) |
+++ swig/Lib/typemaps/carrays.swg (revision 0) |
@@ -0,0 +1,117 @@ |
+/* ----------------------------------------------------------------------------- |
+ * See the LICENSE file for information on copyright, usage and redistribution |
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html. |
+ * |
+ * carrays.swg |
+ * |
+ * This library file contains macros that can be used to manipulate simple |
+ * pointers as arrays. |
+ * ----------------------------------------------------------------------------- */ |
+ |
+/* ----------------------------------------------------------------------------- |
+ * %array_functions(TYPE,NAME) |
+ * |
+ * Generates functions for creating and accessing elements of a C array |
+ * (as pointers). Creates the following functions: |
+ * |
+ * TYPE *new_NAME(int nelements) |
+ * void delete_NAME(TYPE *); |
+ * TYPE NAME_getitem(TYPE *, int index); |
+ * void NAME_setitem(TYPE *, int index, TYPE value); |
+ * |
+ * ----------------------------------------------------------------------------- */ |
+ |
+%define %array_functions(TYPE,NAME) |
+%{ |
+ static TYPE *new_##NAME(size_t nelements) { |
+ return %new_array(nelements, TYPE); |
+ } |
+ |
+ static void delete_##NAME(TYPE *ary) { |
+ %delete_array(ary); |
+ } |
+ |
+ static TYPE NAME##_getitem(TYPE *ary, size_t index) { |
+ return ary[index]; |
+ } |
+ static void NAME##_setitem(TYPE *ary, size_t index, TYPE value) { |
+ ary[index] = value; |
+ } |
+%} |
+ |
+TYPE *new_##NAME(size_t nelements); |
+void delete_##NAME(TYPE *ary); |
+TYPE NAME##_getitem(TYPE *ary, size_t index); |
+void NAME##_setitem(TYPE *ary, size_t index, TYPE value); |
+ |
+%enddef |
+ |
+ |
+/* ----------------------------------------------------------------------------- |
+ * %array_class(TYPE,NAME) |
+ * |
+ * Generates a class wrapper around a C array. The class has the following |
+ * interface: |
+ * |
+ * struct NAME { |
+ * NAME(int nelements); |
+ * ~NAME(); |
+ * TYPE getitem(int index); |
+ * void setitem(int index, TYPE value); |
+ * TYPE * cast(); |
+ * static NAME *frompointer(TYPE *t); |
+ * } |
+ * |
+ * Use |
+ * |
+ * %array_class_wrap(TYPE,NAME,GET,SET) |
+ * |
+ * if you want different names for the get/set methods. |
+ * ----------------------------------------------------------------------------- */ |
+ |
+%define %array_class_wrap(TYPE,NAME,getitem,setitem) |
+%{ |
+typedef TYPE NAME; |
+%} |
+ |
+ |
+typedef struct NAME { |
+} NAME; |
+ |
+%extend NAME { |
+ |
+ NAME(size_t nelements) { |
+ return %new_array(nelements, TYPE); |
+ } |
+ |
+ ~NAME() { |
+ %delete_array(self); |
+ } |
+ |
+ TYPE getitem(size_t index) { |
+ return self[index]; |
+ } |
+ |
+ void setitem(size_t index, TYPE value) { |
+ self[index] = value; |
+ } |
+ |
+ TYPE * cast() { |
+ return self; |
+ } |
+ |
+ static NAME *frompointer(TYPE *t) { |
+ return %static_cast(t, NAME *); |
+ } |
+}; |
+ |
+%types(NAME = TYPE); |
+ |
+%enddef |
+ |
+ |
+#ifndef %array_class |
+%define %array_class(TYPE,NAME) |
+ %array_class_wrap(TYPE,NAME,getitem,setitem) |
+%enddef |
+#endif |