blob: daa9663fb122ff1381fc0994d9cbc55b555c4beb [file] [log] [blame]
//
// 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