// Convert an incoming Python list to a tid_t[] array %typemap(in) tid_t[ANY](tid_t temp[$1_dim0]) { int i, len; if (!PySequence_Check($input)) { PyErr_SetString(PyExc_TypeError,"Expecting a sequence"); return NULL; } /* Cap the number of elements to copy */ len = PySequence_Length($input) < $1_dim0 ? PySequence_Length($input) : $1_dim0; for (i =0; i < len; i++) { PyObject *o = PySequence_GetItem($input,i); if (!PyLong_Check(o)) { Py_XDECREF(o); PyErr_SetString(PyExc_ValueError,"Expecting a sequence of long integers"); return NULL; } temp[i] = PyLong_AsUnsignedLong(o); Py_DECREF(o); } $1 = &temp[0]; } %define %cstring_output_maxstr_none(TYPEMAP, SIZE) %typemap (default) SIZE { $1 = MAXSTR; } %typemap(in,numinputs=0) (TYPEMAP, SIZE) { #ifdef __cplusplus $1 = ($1_ltype) new char[MAXSTR+1]; #else $1 = ($1_ltype) malloc(MAXSTR+1); #endif } %typemap(out) ssize_t { /* REMOVING ssize_t return value in $symname */ } %typemap(argout) (TYPEMAP,SIZE) { if (result > 0) { resultobj = PyString_FromString($1); } else { Py_INCREF(Py_None); resultobj = Py_None; } #ifdef __cplusplus delete [] $1; #else free($1); #endif } %enddef %define %cstring_bounded_output_none(TYPEMAP,MAX) %typemap(in, numinputs=0) TYPEMAP(char temp[MAX+1]) { $1 = ($1_ltype) temp; } %typemap(argout,fragment="t_output_helper") TYPEMAP { PyObject *o; $1[MAX] = 0; if ($1 > 0) { o = PyString_FromString($1); } else { o = Py_None; Py_INCREF(Py_None); } $result = t_output_helper($result,o); } %enddef %define %binary_output_or_none(TYPEMAP, SIZE) %typemap (default) SIZE { $1 = MAXSPECSIZE; } %typemap(in,numinputs=0) (TYPEMAP, SIZE) { #ifdef __cplusplus $1 = (char *) new char[MAXSPECSIZE+1]; #else $1 = (char *) malloc(MAXSPECSIZE+1); #endif } %typemap(out) ssize_t { /* REMOVING ssize_t return value in $symname */ } %typemap(argout) (TYPEMAP,SIZE) { if (result > 0) { resultobj = PyString_FromStringAndSize((char *)$1, result); } else { Py_INCREF(Py_None); resultobj = Py_None; } #ifdef __cplusplus delete [] (char *)$1; #else free((char *)$1); #endif } %enddef %define %binary_output_with_size(TYPEMAP, SIZE) %typemap (default) SIZE { size_t ressize = MAXSPECSIZE; $1 = &ressize; } %typemap(in,numinputs=0) (TYPEMAP, SIZE) { #ifdef __cplusplus $1 = (char *) new char[MAXSPECSIZE+1]; #else $1 = (char *) malloc(MAXSPECSIZE+1); #endif } %typemap(out) ssize_t { /* REMOVING ssize_t return value in $symname */ } %typemap(argout) (TYPEMAP,SIZE) { if (result) { resultobj = PyString_FromStringAndSize((char *)$1, *$2); } else { Py_INCREF(Py_None); resultobj = Py_None; } #ifdef __cplusplus delete [] (char *)$1; #else free((char *)$1); #endif } %enddef // Check that the argument is a callable Python object %typemap(in) PyObject *pyfunc { if (!PyCallable_Check($input)) { PyErr_SetString(PyExc_TypeError, "Expecting a callable object"); return NULL; } $1 = $input; }