Python fixed many APIs to use const char * instead of char * at around Python 2.4. As we support 2.7 and later, we can now remove the non-const string usage. Types changed: PyArg_ParseTuple PyArg_ParseTupleAndKeywords PyArg_UnpackTuple PyDict_SetItemString PyMethodDef PyModuleDef SWIG_Python_UnpackTuple SWIG_Python_str_FromChar SWIG_addvarlink swig_const_info
105 lines
3.1 KiB
Text
105 lines
3.1 KiB
Text
/* ------------------------------------------------------------
|
|
* Typemap specializations for Python
|
|
* ------------------------------------------------------------ */
|
|
|
|
/* ------------------------------------------------------------
|
|
* Fragment section
|
|
* ------------------------------------------------------------ */
|
|
#ifdef SWIG_PYTHON_LEGACY_BOOL
|
|
// Default prior to SWIG 3.0.0
|
|
#undef SWIG_TYPECHECK_BOOL
|
|
%define SWIG_TYPECHECK_BOOL 10000 %enddef
|
|
#endif
|
|
|
|
/* Include fundamental fragment definitions */
|
|
%include <typemaps/fragments.swg>
|
|
|
|
/* Look for user fragments file. */
|
|
%include <pyfragments.swg>
|
|
|
|
/* Python fragments for fundamental types */
|
|
%include <pyprimtypes.swg>
|
|
|
|
/* Python fragments for char* strings */
|
|
%include <pystrings.swg>
|
|
|
|
/* 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 */
|
|
#if defined(SWIGPYTHON_BUILTIN)
|
|
#define SWIG_SetConstant(name, obj) SWIG_Python_SetConstant(d, d == md ? public_interface : NULL, name,obj)
|
|
#else
|
|
#define SWIG_SetConstant(name, obj) SWIG_Python_SetConstant(d, name,obj)
|
|
#endif
|
|
|
|
/* raise */
|
|
#define SWIG_Raise(obj, type, desc) SWIG_Python_Raise(obj, type, desc)
|
|
|
|
/* Include the unified typemap library */
|
|
%include <typemaps/swigtypemaps.swg>
|
|
|
|
|
|
/* ------------------------------------------------------------
|
|
* Python extra typemaps / typemap overrides
|
|
* ------------------------------------------------------------ */
|
|
|
|
/* 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, "$symname", 0, 0, (void *)($value), &$descriptor }
|
|
%typemap(consttab) SWIGTYPE ((* const)(ANY)) = SWIGTYPE ((*)(ANY));
|
|
|
|
%typemap(constcode) SWIGTYPE ((*)(ANY)) "";
|
|
%typemap(constcode) SWIGTYPE ((* const)(ANY)) = 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);
|
|
}
|
|
}
|
|
}
|
|
|