/* ------------------------------------------------------------ * Typemap specializations for Python * ------------------------------------------------------------ */ /* ------------------------------------------------------------ * Fragment section * ------------------------------------------------------------ */ /* bool is dangerous in Python, change precedence */ #undef SWIG_TYPECHECK_BOOL %define SWIG_TYPECHECK_BOOL 10000 %enddef /* Include fundamental fragemt definitions */ %include /* Look for user fragments file. */ %include /* Python fragments for fundamental types */ %include /* Python fragments for char* strings */ %include /* Backward compatibility output helper */ %fragment("t_output_helper","header") %{ #define t_output_helper SWIG_Python_AppendOutput %} /* ------------------------------------------------------------ * Unified typemap section * ------------------------------------------------------------ */ /* directors are supported in Python */ #ifndef SWIG_DIRECTOR_TYPEMAPS #define SWIG_DIRECTOR_TYPEMAPS #endif /* Python types */ #define SWIG_Object PyObject * #define VOID_Object SWIG_Py_Void() /* Python allows implicit conversion */ #define %implicitconv_flag $implicitconv /* Overload of the output/constant/exception/dirout handling */ /* append output */ #define SWIG_AppendOutput(result, obj) SWIG_Python_AppendOutput(result, obj) /* set constant */ #define SWIG_SetConstant(name, obj) SWIG_Python_SetConstant(d, name,obj) /* raise */ #define SWIG_Raise(obj, type, desc) SWIG_Python_Raise(obj, type, desc) /* Include the unified typemap library */ %include /* ------------------------------------------------------------ * Python extra typemaps * ------------------------------------------------------------ */ /* Get the address of the 'python self' object */ %typemap(in,numinputs=0,noblock=1) PyObject **PYTHON_SELF { $1 = &$self; } /* Consttab, needed for callbacks, it should be removed later */ %typemap(consttab) SWIGTYPE ((*)(ANY)) { SWIG_PY_POINTER, (char*)"$symname", 0, 0, (void *)($value), &$descriptor } %typemap(constcode) SWIGTYPE ((*)(ANY)) ""; /* Smart Pointers */ %typemap(out,noblock=1) const SWIGTYPE & SMARTPOINTER { $result = SWIG_NewPointerObj(%new_copy(*$1, $*ltype), $descriptor, SWIG_POINTER_OWN | %newpointer_flags); } %typemap(ret,noblock=1) const SWIGTYPE & SMARTPOINTER, SWIGTYPE SMARTPOINTER { if ($result) { PyObject *robj = PyObject_CallMethod($result, (char *)"__deref__", NULL); if (robj && !PyErr_Occurred()) { SwigPyObject_append((PyObject *) SWIG_Python_GetSwigThis($result), (PyObject *) SWIG_Python_GetSwigThis(robj)); Py_DECREF(robj); } } }