aboutsummaryrefslogtreecommitdiff
path: root/python/pyarmnn/src/pyarmnn/swig/typemaps/permutation_vector.i
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyarmnn/src/pyarmnn/swig/typemaps/permutation_vector.i')
-rw-r--r--python/pyarmnn/src/pyarmnn/swig/typemaps/permutation_vector.i52
1 files changed, 52 insertions, 0 deletions
diff --git a/python/pyarmnn/src/pyarmnn/swig/typemaps/permutation_vector.i b/python/pyarmnn/src/pyarmnn/swig/typemaps/permutation_vector.i
new file mode 100644
index 0000000000..daa9663fb1
--- /dev/null
+++ b/python/pyarmnn/src/pyarmnn/swig/typemaps/permutation_vector.i
@@ -0,0 +1,52 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+%define %permutation_vector_typemap(TYPE1, TYPE2)
+ %typemap(in) (TYPE1, TYPE2) {
+ if (PyTuple_Check($input)) {
+ PyObject* seq = $input;
+
+ $2 = PySequence_Fast_GET_SIZE(seq);
+ $1 = (unsigned int*)PyMem_RawMalloc($2*sizeof(unsigned int));
+
+
+ if(!$1) {
+ PyErr_NoMemory();
+ SWIG_fail;
+ }
+ int size = (int)$2;
+ for(int i=0; i < size; i++) {
+ PyObject *longItem;
+ // Borrowed reference. No need to Py_DECREF
+ PyObject *item = PySequence_Fast_GET_ITEM(seq, i);
+ if(!item) {
+ PyErr_SetString(PyExc_TypeError, "Failed to read data from tuple");
+ SWIG_fail;
+ }
+ // New reference. Need to Py_DECREF
+ longItem = PyNumber_Long(item);
+ if(!longItem) {
+ Py_XDECREF(longItem);
+ PyErr_SetString(PyExc_TypeError, "All elements must be numbers");
+ SWIG_fail;
+ }
+ $1[i] = (unsigned int)PyLong_AsUnsignedLong(longItem);
+ Py_XDECREF(longItem);
+ }
+
+ } else {
+ PyErr_SetString(PyExc_TypeError, "Argument is not a tuple");
+ SWIG_fail;
+ }
+ }
+
+ %typemap(freearg) (TYPE1, TYPE2) {
+ PyMem_RawFree($1);
+ }
+%enddef
+
+%define %clear_permutation_vector_typemap(TYPE1, TYPE2)
+ %typemap(in) (TYPE1, TYPE2);
+ %typemap(freearg) (TYPE1, TYPE2);
+%enddef