summaryrefslogtreecommitdiff
path: root/devtools/swigwin-1.3.34/Lib/typemaps/carrays.swg
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/swigwin-1.3.34/Lib/typemaps/carrays.swg')
-rw-r--r--devtools/swigwin-1.3.34/Lib/typemaps/carrays.swg117
1 files changed, 117 insertions, 0 deletions
diff --git a/devtools/swigwin-1.3.34/Lib/typemaps/carrays.swg b/devtools/swigwin-1.3.34/Lib/typemaps/carrays.swg
new file mode 100644
index 0000000..27ca117
--- /dev/null
+++ b/devtools/swigwin-1.3.34/Lib/typemaps/carrays.swg
@@ -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