Home | History | Annotate | Download | only in python
      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