diff options
Diffstat (limited to 'Lib/python/typemaps.i')
-rw-r--r-- | Lib/python/typemaps.i | 542 |
1 files changed, 145 insertions, 397 deletions
diff --git a/Lib/python/typemaps.i b/Lib/python/typemaps.i index fa20464cc..d6c2ee0a8 100644 --- a/Lib/python/typemaps.i +++ b/Lib/python/typemaps.i @@ -12,19 +12,6 @@ // Disclaimer : Unless you really understand how typemaps work, this file // probably isn't going to make much sense. // -#ifdef AUTODOC -%section "Typemap Library (Python)",info,after,pre,nosort,skip=1,chop_left=3,chop_right=0,chop_top=0,chop_bottom=0 -%text %{ -%include typemaps.i - -The SWIG typemap library provides a language independent mechanism for -supporting output arguments, input values, and other C function -calling mechanisms. The primary use of the library is to provide a -better interface to certain C function--especially those involving -pointers. -%} - -#endif // ------------------------------------------------------------------------ // Pointer handling @@ -37,11 +24,7 @@ pointers. // These remap a C pointer to be an "INPUT" value which is passed by value // instead of reference. - -#ifdef AUTODOC -%subsection "Input Methods" - -%text %{ +/* The following methods can be applied to turn a pointer into a simple "input" value. That is, instead of passing a pointer to an object, you would use a real value instead. @@ -49,10 +32,13 @@ you would use a real value instead. int *INPUT short *INPUT long *INPUT + long long *INPUT unsigned int *INPUT unsigned short *INPUT unsigned long *INPUT + unsigned long long *INPUT unsigned char *INPUT + bool *INPUT float *INPUT double *INPUT @@ -73,73 +59,40 @@ or you can use the %apply directive : %apply double *INPUT { double *a, double *b }; double fadd(double *a, double *b); -%} -#endif +*/ -%typemap(python,in) double *INPUT(double temp) +%define INPUT_TYPEMAP(type, converter) +%typemap(in) type *INPUT(type temp), type &INPUT(type temp) { - temp = PyFloat_AsDouble($source); - $target = &temp; + temp = converter($input); + if (PyErr_Occurred()) SWIG_fail; + $1 = &temp; } +%typemap(typecheck) type *INPUT = type; +%typemap(typecheck) type &INPUT = type; +%enddef + +INPUT_TYPEMAP(float, PyFloat_AsDouble); +INPUT_TYPEMAP(double, PyFloat_AsDouble); +INPUT_TYPEMAP(int, PyInt_AsLong); +INPUT_TYPEMAP(short, PyInt_AsLong); +INPUT_TYPEMAP(long, PyInt_AsLong); +INPUT_TYPEMAP(long long, PyLong_AsLongLong); +INPUT_TYPEMAP(unsigned int, PyInt_AsLong); +INPUT_TYPEMAP(unsigned short, PyInt_AsLong); +INPUT_TYPEMAP(unsigned long, PyInt_AsLong); +INPUT_TYPEMAP(unsigned long long, PyLong_AsUnsignedLongLong); +INPUT_TYPEMAP(unsigned char, PyInt_AsLong); +INPUT_TYPEMAP(signed char, PyInt_AsLong); +INPUT_TYPEMAP(bool, PyInt_AsLong); + +#undef INPUT_TYPEMAP -%typemap(python,in) float *INPUT(float temp) -{ - temp = (float) PyFloat_AsDouble($source); - $target = &temp; -} - -%typemap(python,in) int *INPUT(int temp) -{ - temp = (int) PyInt_AsLong($source); - $target = &temp; -} - -%typemap(python,in) short *INPUT(short temp) -{ - temp = (short) PyInt_AsLong($source); - $target = &temp; -} - -%typemap(python,in) long *INPUT(long temp) -{ - temp = (long) PyInt_AsLong($source); - $target = &temp; -} -%typemap(python,in) unsigned int *INPUT(unsigned int temp) -{ - temp = (unsigned int) PyInt_AsLong($source); - $target = &temp; -} -%typemap(python,in) unsigned short *INPUT(unsigned short temp) -{ - temp = (unsigned short) PyInt_AsLong($source); - $target = &temp; -} -%typemap(python,in) unsigned long *INPUT(unsigned long temp) -{ - temp = (unsigned long) PyInt_AsLong($source); - $target = &temp; -} -%typemap(python,in) unsigned char *INPUT(unsigned char temp) -{ - temp = (unsigned char) PyInt_AsLong($source); - $target = &temp; -} - -%typemap(python,in) signed char *INPUT(signed char temp) -{ - temp = (unsigned char) PyInt_AsLong($source); - $target = &temp; -} - // OUTPUT typemaps. These typemaps are used for parameters that // are output only. The output value is appended to the result as // a list element. -#ifdef AUTODOC -%subsection "Output Methods" - -%text %{ +/* The following methods can be applied to turn a pointer into an "output" value. When calling a function, no input value would be given for a parameter, but an output value would be returned. In the case of @@ -148,15 +101,16 @@ multiple output values, they are returned in the form of a Python tuple. int *OUTPUT short *OUTPUT long *OUTPUT + long long *OUTPUT unsigned int *OUTPUT unsigned short *OUTPUT unsigned long *OUTPUT + unsigned long long *OUTPUT unsigned char *OUTPUT + bool *OUTPUT float *OUTPUT double *OUTPUT -A Python List can also be returned by using L_OUTPUT instead of OUTPUT. - For example, suppose you were trying to wrap the modf() function in the C math library which splits x into integral and fractional parts (and returns the integer part in one of its parameters).K: @@ -176,70 +130,8 @@ or you can use the %apply directive : The Python output of the function would be a tuple containing both output values. -%} -#endif - -// Helper function for List output - -%{ -static PyObject* l_output_helper(PyObject* target, PyObject* o) { - PyObject* o2; - if (!target) { - target = o; - } else if (target == Py_None) { - Py_DECREF(Py_None); - target = o; - } else { - if (!PyList_Check(target)) { - o2 = target; - target = PyList_New(0); - PyList_Append(target, o2); - Py_XDECREF(o2); - } - PyList_Append(target,o); - Py_XDECREF(o); - } - return target; -} -%} - -// Force the argument to be ignored. - -%typemap(python,ignore) int *L_OUTPUT(int temp), - short *L_OUTPUT(short temp), - long *L_OUTPUT(long temp), - unsigned int *L_OUTPUT(unsigned int temp), - unsigned short *L_OUTPUT(unsigned short temp), - unsigned long *L_OUTPUT(unsigned long temp), - unsigned char *L_OUTPUT(unsigned char temp), - signed char *L_OUTPUT(signed char temp), - float *L_OUTPUT(float temp), - double *L_OUTPUT(double temp) -{ - $target = &temp; -} - -%typemap(python,argout) int *L_OUTPUT, - short *L_OUTPUT, - long *L_OUTPUT, - unsigned int *L_OUTPUT, - unsigned short *L_OUTPUT, - unsigned long *L_OUTPUT, - unsigned char *L_OUTPUT, - signed char *L_OUTPUT -{ - PyObject *o; - o = PyInt_FromLong((long) (*$source)); - l_output_helper($target,o); -} -%typemap(python,argout) float *L_OUTPUT, - double *L_OUTPUT -{ - PyObject *o; - o = PyFloat_FromDouble((double) (*$source)); - $target = l_output_helper($target,o); -} +*/ // These typemaps contributed by Robin Dunn //---------------------------------------------------------------------- @@ -250,139 +142,52 @@ static PyObject* l_output_helper(PyObject* target, PyObject* o) { // Author: Robin Dunn //---------------------------------------------------------------------- -%{ -static PyObject* t_output_helper(PyObject* target, PyObject* o) { - PyObject* o2; - PyObject* o3; - - if (!target) { - target = o; - } else if (target == Py_None) { - Py_DECREF(Py_None); - target = o; - } else { - if (!PyTuple_Check(target)) { - o2 = target; - target = PyTuple_New(1); - PyTuple_SetItem(target, 0, o2); - } - o3 = PyTuple_New(1); - PyTuple_SetItem(o3, 0, o); - - o2 = target; - target = PySequence_Concat(o2, o3); - Py_DECREF(o2); - Py_DECREF(o3); - } - return target; -} -%} - -// Force the argument to be ignored. -%typemap(python,ignore) int *T_OUTPUT(int temp), - short *T_OUTPUT(short temp), - long *T_OUTPUT(long temp), - unsigned int *T_OUTPUT(unsigned int temp), - unsigned short *T_OUTPUT(unsigned short temp), - unsigned long *T_OUTPUT(unsigned long temp), - unsigned char *T_OUTPUT(unsigned char temp), - float *T_OUTPUT(float temp), - double *T_OUTPUT(double temp) -{ - $target = &temp; -} +%include "fragments.i" -%typemap(python,argout) int *T_OUTPUT, - short *T_OUTPUT, - long *T_OUTPUT, - unsigned int *T_OUTPUT, - unsigned short *T_OUTPUT, - unsigned long *T_OUTPUT, - unsigned char *T_OUTPUT -{ - PyObject *o; - o = PyInt_FromLong((long) (*$source)); - $target = t_output_helper($target, o); +%define OUTPUT_TYPEMAP(type, converter, convtype) +%typemap(in,numinputs=0) type *OUTPUT(type temp), type &OUTPUT(type temp) "$1 = &temp;"; +%typemap(argout,fragment="t_output_helper") type *OUTPUT, type &OUTPUT { + PyObject *o = converter(convtype (*$1)); + $result = t_output_helper($result,o); } - -%typemap(python,argout) float *T_OUTPUT, - double *T_OUTPUT -{ - PyObject *o; - o = PyFloat_FromDouble((double) (*$source)); - $target = t_output_helper($target, o); -} - -// Set the default output typemap - -#ifdef OUTPUT_LIST -%typemap(python,ignore) int *OUTPUT = int *L_OUTPUT; -%typemap(python,ignore) short *OUTPUT = short *L_OUTPUT; -%typemap(python,ignore) long *OUTPUT = long *L_OUTPUT; -%typemap(python,ignore) unsigned *OUTPUT = unsigned *L_OUTPUT; -%typemap(python,ignore) unsigned short *OUTPUT = unsigned short *L_OUTPUT; -%typemap(python,ignore) unsigned long *OUTPUT = unsigned long *L_OUTPUT; -%typemap(python,ignore) unsigned char *OUTPUT = unsigned char *L_OUTPUT; -%typemap(python,ignore) signed char *OUTPUT = signed char *L_OUTPUT; -%typemap(python,ignore) double *OUTPUT = double *L_OUTPUT; -%typemap(python,ignore) float *OUTPUT = float *L_OUTPUT; - -%typemap(python,argout) int *OUTPUT = int *L_OUTPUT; -%typemap(python,argout) short *OUTPUT = short *L_OUTPUT; -%typemap(python,argout) long *OUTPUT = long *L_OUTPUT; -%typemap(python,argout) unsigned *OUTPUT = unsigned *L_OUTPUT; -%typemap(python,argout) unsigned short *OUTPUT = unsigned short *L_OUTPUT; -%typemap(python,argout) unsigned long *OUTPUT = unsigned long *L_OUTPUT; -%typemap(python,argout) unsigned char *OUTPUT = unsigned char *L_OUTPUT; -%typemap(python,argout) signed char *OUTPUT = signed char *L_OUTPUT; -%typemap(python,argout) double *OUTPUT = double *L_OUTPUT; -%typemap(python,argout) float *OUTPUT = float *L_OUTPUT; -#else -%typemap(python,ignore) int *OUTPUT = int *T_OUTPUT; -%typemap(python,ignore) short *OUTPUT = short *T_OUTPUT; -%typemap(python,ignore) long *OUTPUT = long *T_OUTPUT; -%typemap(python,ignore) unsigned *OUTPUT = unsigned *T_OUTPUT; -%typemap(python,ignore) unsigned short *OUTPUT = unsigned short *T_OUTPUT; -%typemap(python,ignore) unsigned long *OUTPUT = unsigned long *T_OUTPUT; -%typemap(python,ignore) unsigned char *OUTPUT = unsigned char *T_OUTPUT; -%typemap(python,ignore) signed char *OUTPUT = signed char *T_OUTPUT; -%typemap(python,ignore) double *OUTPUT = double *T_OUTPUT; -%typemap(python,ignore) float *OUTPUT = float *T_OUTPUT; - -%typemap(python,argout) int *OUTPUT = int *T_OUTPUT; -%typemap(python,argout) short *OUTPUT = short *T_OUTPUT; -%typemap(python,argout) long *OUTPUT = long *T_OUTPUT; -%typemap(python,argout) unsigned *OUTPUT = unsigned *T_OUTPUT; -%typemap(python,argout) unsigned short *OUTPUT = unsigned short *T_OUTPUT; -%typemap(python,argout) unsigned long *OUTPUT = unsigned long *T_OUTPUT; -%typemap(python,argout) unsigned char *OUTPUT = unsigned char *T_OUTPUT; -%typemap(python,argout) signed char *OUTPUT = signed char *T_OUTPUT; -%typemap(python,argout) double *OUTPUT = double *T_OUTPUT; -%typemap(python,argout) float *OUTPUT = float *T_OUTPUT; -#endif +%enddef + +OUTPUT_TYPEMAP(int, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(short, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(long, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(long long, PyLong_FromLongLong, (long long)); +OUTPUT_TYPEMAP(unsigned int, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(unsigned short, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(unsigned long, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(unsigned long long, PyLong_FromUnsignedLongLong, (unsigned long long)); +OUTPUT_TYPEMAP(unsigned char, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(signed char, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(bool, PyInt_FromLong, (long)); +OUTPUT_TYPEMAP(float, PyFloat_FromDouble, (double)); +OUTPUT_TYPEMAP(double, PyFloat_FromDouble, (double)); + +#undef OUTPUT_TYPEMAP // INOUT // Mappings for an argument that is both an input and output // parameter - -#ifdef AUTODOC -%subsection "Input/Output Methods" - -%text %{ +/* The following methods can be applied to make a function parameter both an input and output value. This combines the behavior of both the "INPUT" and "OUTPUT" methods described earlier. Output values are -returned in the form of a Python tuple. To return a Python list, -using L_INOUT instead. +returned in the form of a Python tuple. int *INOUT short *INOUT long *INOUT + long long *INOUT unsigned int *INOUT unsigned short *INOUT unsigned long *INOUT + unsigned long long *INOUT unsigned char *INOUT + bool *INOUT float *INOUT double *INOUT @@ -413,149 +218,92 @@ to a Python variable you might do this : Note : previous versions of SWIG used the symbol 'BOTH' to mark input/output arguments. This is still supported, but will be slowly phased out in future releases. -%} - -#endif - -%typemap(python,in) int *INOUT = int *INPUT; -%typemap(python,in) short *INOUT = short *INPUT; -%typemap(python,in) long *INOUT = long *INPUT; -%typemap(python,in) unsigned *INOUT = unsigned *INPUT; -%typemap(python,in) unsigned short *INOUT = unsigned short *INPUT; -%typemap(python,in) unsigned long *INOUT = unsigned long *INPUT; -%typemap(python,in) unsigned char *INOUT = unsigned char *INPUT; -%typemap(python,in) float *INOUT = float *INPUT; -%typemap(python,in) double *INOUT = double *INPUT; - -%typemap(python,argout) int *INOUT = int *OUTPUT; -%typemap(python,argout) short *INOUT = short *OUTPUT; -%typemap(python,argout) long *INOUT = long *OUTPUT; -%typemap(python,argout) unsigned *INOUT = unsigned *OUTPUT; -%typemap(python,argout) unsigned short *INOUT = unsigned short *OUTPUT; -%typemap(python,argout) unsigned long *INOUT = unsigned long *OUTPUT; -%typemap(python,argout) unsigned char *INOUT = unsigned char *OUTPUT; -%typemap(python,argout) float *INOUT = float *OUTPUT; -%typemap(python,argout) double *INOUT = double *OUTPUT; - -%typemap(python,in) int *T_INOUT = int *INPUT; -%typemap(python,in) short *T_INOUT = short *INPUT; -%typemap(python,in) long *T_INOUT = long *INPUT; -%typemap(python,in) unsigned *T_INOUT = unsigned *INPUT; -%typemap(python,in) unsigned short *T_INOUT = unsigned short *INPUT; -%typemap(python,in) unsigned long *T_INOUT = unsigned long *INPUT; -%typemap(python,in) unsigned char *T_INOUT = unsigned char *INPUT; -%typemap(python,in) float *T_INOUT = float *INPUT; -%typemap(python,in) double *T_INOUT = double *INPUT; - -%typemap(python,argout) int *T_INOUT = int *T_OUTPUT; -%typemap(python,argout) short *T_INOUT = short *T_OUTPUT; -%typemap(python,argout) long *T_INOUT = long *T_OUTPUT; -%typemap(python,argout) unsigned *T_INOUT = unsigned *T_OUTPUT; -%typemap(python,argout) unsigned short *T_INOUT = unsigned short *T_OUTPUT; -%typemap(python,argout) unsigned long *T_INOUT = unsigned long *T_OUTPUT; -%typemap(python,argout) unsigned char *T_INOUT = unsigned char *T_OUTPUT; -%typemap(python,argout) float *T_INOUT = float *T_OUTPUT; -%typemap(python,argout) double *T_INOUT = double *T_OUTPUT; - -%typemap(python,in) int *L_INOUT = int *INPUT; -%typemap(python,in) short *L_INOUT = short *INPUT; -%typemap(python,in) long *L_INOUT = long *INPUT; -%typemap(python,in) unsigned *L_INOUT = unsigned *INPUT; -%typemap(python,in) unsigned short *L_INOUT = unsigned short *INPUT; -%typemap(python,in) unsigned long *L_INOUT = unsigned long *INPUT; -%typemap(python,in) unsigned char *L_INOUT = unsigned char *INPUT; -%typemap(python,in) float *L_INOUT = float *INPUT; -%typemap(python,in) double *L_INOUT = double *INPUT; - -%typemap(python,argout) int *L_INOUT = int *L_OUTPUT; -%typemap(python,argout) short *L_INOUT = short *L_OUTPUT; -%typemap(python,argout) long *L_INOUT = long *L_OUTPUT; -%typemap(python,argout) unsigned *L_INOUT = unsigned *L_OUTPUT; -%typemap(python,argout) unsigned short *L_INOUT = unsigned short *L_OUTPUT; -%typemap(python,argout) unsigned long *L_INOUT = unsigned long *L_OUTPUT; -%typemap(python,argout) unsigned char *L_INOUT = unsigned char *L_OUTPUT; -%typemap(python,argout) float *L_INOUT = float *L_OUTPUT; -%typemap(python,argout) double *L_INOUT = double *L_OUTPUT; - -// Backwards compatibility - -%typemap(python,in) int *BOTH = int *INOUT; -%typemap(python,in) short *BOTH = short *INOUT; -%typemap(python,in) long *BOTH = long *INOUT; -%typemap(python,in) unsigned *BOTH = unsigned *INOUT; -%typemap(python,in) unsigned short *BOTH = unsigned short *INOUT; -%typemap(python,in) unsigned long *BOTH = unsigned long *INOUT; -%typemap(python,in) unsigned char *BOTH = unsigned char *INOUT; -%typemap(python,in) float *BOTH = float *INOUT; -%typemap(python,in) double *BOTH = double *INOUT; - -%typemap(python,argout) int *BOTH = int *INOUT; -%typemap(python,argout) short *BOTH = short *INOUT; -%typemap(python,argout) long *BOTH = long *INOUT; -%typemap(python,argout) unsigned *BOTH = unsigned *INOUT; -%typemap(python,argout) unsigned short *BOTH = unsigned short *INOUT; -%typemap(python,argout) unsigned long *BOTH = unsigned long *INOUT; -%typemap(python,argout) unsigned char *BOTH = unsigned char *INOUT; -%typemap(python,argout) float *BOTH = float *INOUT; -%typemap(python,argout) double *BOTH = double *INOUT; - -%typemap(python,in) int *T_BOTH = int *T_INOUT; -%typemap(python,in) short *T_BOTH = short *T_INOUT; -%typemap(python,in) long *T_BOTH = long *T_INOUT; -%typemap(python,in) unsigned *T_BOTH = unsigned *T_INOUT; -%typemap(python,in) unsigned short *T_BOTH = unsigned short *T_INOUT; -%typemap(python,in) unsigned long *T_BOTH = unsigned long *T_INOUT; -%typemap(python,in) unsigned char *T_BOTH = unsigned char *T_INOUT; -%typemap(python,in) float *T_BOTH = float *T_INOUT; -%typemap(python,in) double *T_BOTH = double *T_INOUT; - -%typemap(python,argout) int *T_BOTH = int *T_INOUT; -%typemap(python,argout) short *T_BOTH = short *T_INOUT; -%typemap(python,argout) long *T_BOTH = long *T_INOUT; -%typemap(python,argout) unsigned *T_BOTH = unsigned *T_INOUT; -%typemap(python,argout) unsigned short *T_BOTH = unsigned short *T_INOUT; -%typemap(python,argout) unsigned long *T_BOTH = unsigned long *T_INOUT; -%typemap(python,argout) unsigned char *T_BOTH = unsigned char *T_INOUT; -%typemap(python,argout) float *T_BOTH = float *T_INOUT; -%typemap(python,argout) double *T_BOTH = double *T_INOUT; - -// -------------------------------------------------------------------- -// Special types -// -// -------------------------------------------------------------------- - -#ifdef AUTODOC -%subsection "Special Methods" - -%text %{ -The typemaps.i library also provides the following mappings : -PyObject * +*/ + +%typemap(in) int *INOUT = int *INPUT; +%typemap(in) short *INOUT = short *INPUT; +%typemap(in) long *INOUT = long *INPUT; +%typemap(in) long long *INOUT = long long *INPUT; +%typemap(in) unsigned *INOUT = unsigned *INPUT; +%typemap(in) unsigned short *INOUT = unsigned short *INPUT; +%typemap(in) unsigned long *INOUT = unsigned long *INPUT; +%typemap(in) unsigned long long *INOUT = unsigned long long *INPUT; +%typemap(in) unsigned char *INOUT = unsigned char *INPUT; +%typemap(in) bool *INOUT = bool *INPUT; +%typemap(in) float *INOUT = float *INPUT; +%typemap(in) double *INOUT = double *INPUT; + +%typemap(in) int &INOUT = int &INPUT; +%typemap(in) short &INOUT = short &INPUT; +%typemap(in) long &INOUT = long &INPUT; +%typemap(in) long long &INOUT = long long &INPUT; +%typemap(in) unsigned &INOUT = unsigned &INPUT; +%typemap(in) unsigned short &INOUT = unsigned short &INPUT; +%typemap(in) unsigned long &INOUT = unsigned long &INPUT; +%typemap(in) unsigned long long &INOUT = unsigned long long &INPUT; +%typemap(in) unsigned char &INOUT = unsigned char &INPUT; +%typemap(in) bool &INOUT = bool &INPUT; +%typemap(in) float &INOUT = float &INPUT; +%typemap(in) double &INOUT = double &INPUT; + +%typemap(argout) int *INOUT = int *OUTPUT; +%typemap(argout) short *INOUT = short *OUTPUT; +%typemap(argout) long *INOUT = long *OUTPUT; +%typemap(argout) long long *INOUT = long long *OUTPUT; +%typemap(argout) unsigned *INOUT = unsigned *OUTPUT; +%typemap(argout) unsigned short *INOUT = unsigned short *OUTPUT; +%typemap(argout) unsigned long *INOUT = unsigned long *OUTPUT; +%typemap(argout) unsigned long long *INOUT = unsigned long long *OUTPUT; +%typemap(argout) unsigned char *INOUT = unsigned char *OUTPUT; +%typemap(argout) bool *INOUT = bool *OUTPUT; +%typemap(argout) float *INOUT = float *OUTPUT; +%typemap(argout) double *INOUT = double *OUTPUT; + +%typemap(argout) int &INOUT = int &OUTPUT; +%typemap(argout) short &INOUT = short &OUTPUT; +%typemap(argout) long &INOUT = long &OUTPUT; +%typemap(argout) long long &INOUT = long long &OUTPUT; +%typemap(argout) unsigned &INOUT = unsigned &OUTPUT; +%typemap(argout) unsigned short &INOUT = unsigned short &OUTPUT; +%typemap(argout) unsigned long &INOUT = unsigned long &OUTPUT; +%typemap(argout) unsigned long long &INOUT = unsigned long long &OUTPUT; +%typemap(argout) unsigned char &INOUT = unsigned char &OUTPUT; +%typemap(argout) bool &INOUT = bool &OUTPUT; +%typemap(argout) float &INOUT = float &OUTPUT; +%typemap(argout) double &INOUT = double &OUTPUT; + +/* Overloading information */ + +%typemap(typecheck) double *INOUT = double; +%typemap(typecheck) bool *INOUT = bool; +%typemap(typecheck) signed char *INOUT = signed char; +%typemap(typecheck) unsigned char *INOUT = unsigned char; +%typemap(typecheck) unsigned long *INOUT = unsigned long; +%typemap(typecheck) unsigned long long *INOUT = unsigned long long; +%typemap(typecheck) unsigned short *INOUT = unsigned short; +%typemap(typecheck) unsigned int *INOUT = unsigned int; +%typemap(typecheck) long *INOUT = long; +%typemap(typecheck) long long *INOUT = long long; +%typemap(typecheck) short *INOUT = short; +%typemap(typecheck) int *INOUT = int; +%typemap(typecheck) float *INOUT = float; + +%typemap(typecheck) double &INOUT = double; +%typemap(typecheck) bool &INOUT = bool; +%typemap(typecheck) signed char &INOUT = signed char; +%typemap(typecheck) unsigned char &INOUT = unsigned char; +%typemap(typecheck) unsigned long &INOUT = unsigned long; +%typemap(typecheck) unsigned long long &INOUT = unsigned long long; +%typemap(typecheck) unsigned short &INOUT = unsigned short; +%typemap(typecheck) unsigned int &INOUT = unsigned int; +%typemap(typecheck) long &INOUT = long; +%typemap(typecheck) long long &INOUT = long long; +%typemap(typecheck) short &INOUT = short; +%typemap(typecheck) int &INOUT = int; +%typemap(typecheck) float &INOUT = float; - When a PyObject * appears as either an input value or return - value of a function, SWIG passes it through unmodified. Thus, - if you want to write a C function that operates on PyObjects, - it is easy to write. For example : - %include typemaps.i - PyObject *spam(PyObject *obj1, int n); - Unlike normal Python wrapper functions, These functions can - use any combination of parameters that you wish. -%} - -#endif - - -// If a PyObject * appears as either an argument or a function return -// value, simply pass it straight through. - -%typemap(python,in) PyObject * { - $target = $source; -} - -%typemap(python,out) PyObject * { - $target = $source; -} |