1 /* ------------------------------------------------------------ 2 * Typemap specializations for Python 3 * ------------------------------------------------------------ */ 4 5 /* ------------------------------------------------------------ 6 * Fragment section 7 * ------------------------------------------------------------ */ 8 /* bool is dangerous in Python, change precedence */ 9 #undef SWIG_TYPECHECK_BOOL 10 %define SWIG_TYPECHECK_BOOL 10000 %enddef 11 12 /* Include fundamental fragemt definitions */ 13 %include <typemaps/fragments.swg> 14 15 /* Look for user fragments file. */ 16 %include <pyfragments.swg> 17 18 /* Python fragments for fundamental types */ 19 %include <pyprimtypes.swg> 20 21 /* Python fragments for char* strings */ 22 %include <pystrings.swg> 23 24 /* Backward compatibility output helper */ 25 %fragment("t_output_helper","header") %{ 26 #define t_output_helper SWIG_Python_AppendOutput 27 %} 28 29 30 /* ------------------------------------------------------------ 31 * Unified typemap section 32 * ------------------------------------------------------------ */ 33 34 /* directors are supported in Python */ 35 #ifndef SWIG_DIRECTOR_TYPEMAPS 36 #define SWIG_DIRECTOR_TYPEMAPS 37 #endif 38 39 40 /* Python types */ 41 #define SWIG_Object PyObject * 42 #define VOID_Object SWIG_Py_Void() 43 44 /* Python allows implicit conversion */ 45 #define %implicitconv_flag $implicitconv 46 47 48 /* Overload of the output/constant/exception/dirout handling */ 49 50 /* append output */ 51 #define SWIG_AppendOutput(result, obj) SWIG_Python_AppendOutput(result, obj) 52 53 /* set constant */ 54 #if defined(SWIGPYTHON_BUILTIN) 55 #define SWIG_SetConstant(name, obj) SWIG_Python_SetConstant(d, d == md ? public_interface : NULL, name,obj) 56 #else 57 #define SWIG_SetConstant(name, obj) SWIG_Python_SetConstant(d, name,obj) 58 #endif 59 60 /* raise */ 61 #define SWIG_Raise(obj, type, desc) SWIG_Python_Raise(obj, type, desc) 62 63 /* Include the unified typemap library */ 64 %include <typemaps/swigtypemaps.swg> 65 66 67 /* ------------------------------------------------------------ 68 * Python extra typemaps / typemap overrides 69 * ------------------------------------------------------------ */ 70 71 /* Get the address of the 'python self' object */ 72 73 %typemap(in,numinputs=0,noblock=1) PyObject **PYTHON_SELF { 74 $1 = &$self; 75 } 76 77 78 /* Consttab, needed for callbacks, it should be removed later */ 79 80 %typemap(consttab) SWIGTYPE ((*)(ANY)) 81 { SWIG_PY_POINTER, (char*)"$symname", 0, 0, (void *)($value), &$descriptor } 82 83 %typemap(constcode) SWIGTYPE ((*)(ANY)) ""; 84 85 86 /* Smart Pointers */ 87 %typemap(out,noblock=1) const SWIGTYPE & SMARTPOINTER { 88 $result = SWIG_NewPointerObj(%new_copy(*$1, $*ltype), $descriptor, SWIG_POINTER_OWN | %newpointer_flags); 89 } 90 91 %typemap(ret,noblock=1) const SWIGTYPE & SMARTPOINTER, SWIGTYPE SMARTPOINTER { 92 if ($result) { 93 PyObject *robj = PyObject_CallMethod($result, (char *)"__deref__", NULL); 94 if (robj && !PyErr_Occurred()) { 95 SwigPyObject_append((PyObject *) SWIG_Python_GetSwigThis($result), 96 (PyObject *) SWIG_Python_GetSwigThis(robj)); 97 Py_DECREF(robj); 98 } 99 } 100 } 101 102