Home | History | Annotate | Download | only in d
      1 /* -----------------------------------------------------------------------------
      2  * dswigtype.swg
      3  *
      4  * Typemaps for non-primitive types (C/C++ classes and structs).
      5  * ----------------------------------------------------------------------------- */
      6 
      7 %typemap(ctype) SWIGTYPE "void *"
      8 %typemap(imtype) SWIGTYPE "void*"
      9 %typemap(dtype) SWIGTYPE "$&dclassname"
     10 
     11 %typemap(ctype) SWIGTYPE [] "void *"
     12 %typemap(imtype) SWIGTYPE [] "void*"
     13 %typemap(dtype) SWIGTYPE [] "$dclassname"
     14 
     15 %typemap(ctype) SWIGTYPE * "void *"
     16 %typemap(imtype) SWIGTYPE * "void*"
     17 %typemap(dtype, nativepointer="$dtype") SWIGTYPE * "$dclassname"
     18 
     19 %typemap(ctype) SWIGTYPE & "void *"
     20 %typemap(imtype) SWIGTYPE & "void*"
     21 %typemap(dtype, nativepointer="$dtype") SWIGTYPE & "$dclassname"
     22 
     23 %typemap(ctype) SWIGTYPE *const& "void *"
     24 %typemap(imtype) SWIGTYPE *const& "void*"
     25 %typemap(dtype) SWIGTYPE *const& "$*dclassname"
     26 
     27 %typecheck(SWIG_TYPECHECK_POINTER)
     28     SWIGTYPE,
     29     SWIGTYPE *,
     30     SWIGTYPE &,
     31     SWIGTYPE [],
     32     SWIGTYPE *const&
     33   ""
     34 
     35 
     36 /*
     37  * By-value conversion typemaps (parameter is converted to a pointer).
     38  */
     39 
     40 %typemap(in, canthrow=1) SWIGTYPE ($&1_type argp)
     41 %{ argp = ($&1_ltype)$input;
     42    if (!argp) {
     43      SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "Attempt to dereference null $1_type");
     44      return $null;
     45    }
     46    $1 = *argp; %}
     47 
     48 %typemap(out) SWIGTYPE
     49 #ifdef __cplusplus
     50 %{ $result = new $1_ltype((const $1_ltype &)$1); %}
     51 #else
     52 {
     53   $&1_ltype $1ptr = ($&1_ltype) malloc(sizeof($1_ltype));
     54   memmove($1ptr, &$1, sizeof($1_type));
     55   $result = $1ptr;
     56 }
     57 #endif
     58 
     59 %typemap(directorin) SWIGTYPE
     60   "$input = (void *)&$1;"
     61 %typemap(directorout) SWIGTYPE
     62 %{ if (!$input) {
     63      SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "Unexpected null return for type $1_type");
     64      return $null;
     65    }
     66    $result = *($&1_ltype)$input; %}
     67 
     68 %typemap(ddirectorin) SWIGTYPE "new $&dclassname($winput, false)"
     69 %typemap(ddirectorout) SWIGTYPE "$&dclassname.swigGetCPtr($dcall)"
     70 
     71 %typemap(din) SWIGTYPE "$&dclassname.swigGetCPtr($dinput)"
     72 %typemap(dout, excode=SWIGEXCODE) SWIGTYPE {
     73   $&dclassname ret = new $&dclassname($imcall, true);$excode
     74   return ret;
     75 }
     76 
     77 
     78 /*
     79  * Pointer conversion typemaps.
     80  */
     81 
     82 %typemap(in) SWIGTYPE * "$1 = ($1_ltype)$input;"
     83 %typemap(out) SWIGTYPE * "$result = (void *)$1;"
     84 
     85 %typemap(directorin) SWIGTYPE *
     86   "$input = (void *) $1;"
     87 %typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE *
     88   "$result = ($1_ltype)$input;"
     89 
     90 %typemap(ddirectorin,
     91   nativepointer="cast($dtype)$winput"
     92 ) SWIGTYPE * "($winput is null) ? null : new $dclassname($winput, false)"
     93 
     94 %typemap(ddirectorout,
     95   nativepointer="cast(void*)$dcall"
     96 ) SWIGTYPE * "$dclassname.swigGetCPtr($dcall)"
     97 
     98 %typemap(din,
     99   nativepointer="cast(void*)$dinput"
    100 ) SWIGTYPE * "$dclassname.swigGetCPtr($dinput)"
    101 
    102 %typemap(dout, excode=SWIGEXCODE,
    103   nativepointer="{\n  auto ret = cast($dtype)$imcall;$excode\n  return ret;\n}"
    104 ) SWIGTYPE * {
    105   void* cPtr = $imcall;
    106   $dclassname ret = (cPtr is null) ? null : new $dclassname(cPtr, $owner);$excode
    107   return ret;
    108 }
    109 
    110 // Use the same typemaps for const pointers.
    111 %apply SWIGTYPE * { SWIGTYPE *const }
    112 
    113 
    114 /*
    115  * Reference conversion typemaps.
    116  */
    117 
    118 %typemap(in, canthrow=1) SWIGTYPE & %{ $1 = ($1_ltype)$input;
    119   if (!$1) {
    120     SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "$1_type type is null");
    121     return $null;
    122   } %}
    123 %typemap(out) SWIGTYPE & "$result = (void *)$1;"
    124 
    125 %typemap(directorin) SWIGTYPE &
    126   "$input = ($1_ltype) &$1;"
    127 %typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE &
    128 %{ if (!$input) {
    129      SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "Unexpected null return for type $1_type");
    130      return $null;
    131    }
    132    $result = ($1_ltype)$input; %}
    133 
    134 %typemap(ddirectorin,
    135   nativepointer="cast($dtype)$winput"
    136 ) SWIGTYPE & "new $dclassname($winput, false)"
    137 %typemap(ddirectorout,
    138   nativepointer="cast(void*)$dcall"
    139 ) SWIGTYPE & "$dclassname.swigGetCPtr($dcall)"
    140 
    141 %typemap(din,
    142   nativepointer="cast(void*)$dinput"
    143 ) SWIGTYPE & "$dclassname.swigGetCPtr($dinput)"
    144 %typemap(dout, excode=SWIGEXCODE,
    145   nativepointer="{\n  auto ret = cast($dtype)$imcall;$excode\n  return ret;\n}") SWIGTYPE & {
    146   $dclassname ret = new $dclassname($imcall, $owner);$excode
    147   return ret;
    148 }
    149 
    150 
    151 /*
    152  * Array conversion typemaps.
    153  */
    154 
    155 %typemap(in) SWIGTYPE [] %{ $1 = ($1_ltype)$input; %}
    156 %typemap(out) SWIGTYPE [] %{ $result = $1; %}
    157 
    158 %typemap(din) SWIGTYPE [] "$dclassname.swigGetCPtr($dinput)"
    159 %typemap(dout, excode=SWIGEXCODE) SWIGTYPE [] {
    160   void* cPtr = $imcall;
    161   $dclassname ret = (cPtr is null) ? null : new $dclassname(cPtr, $owner);$excode
    162   return ret;
    163 }
    164 
    165 // Treat references to arrays like like references to a single element.
    166 %apply SWIGTYPE & { SWIGTYPE ((&)[ANY]) }
    167 
    168 
    169 /*
    170  * Pointer reference conversion typemaps.
    171  */
    172 
    173 %typemap(in) SWIGTYPE *const& ($*1_ltype temp = 0)
    174 %{ temp = ($*1_ltype)$input;
    175    $1 = ($1_ltype)&temp; %}
    176 %typemap(out) SWIGTYPE *const&
    177 %{ $result = (void *)*$1; %}
    178 
    179 %typemap(din) SWIGTYPE *const& "$*dclassname.swigGetCPtr($dinput)"
    180 %typemap(dout, excode=SWIGEXCODE) SWIGTYPE *const& {
    181   void* cPtr = $imcall;
    182   $*dclassname ret = (cPtr is null) ? null : new $*dclassname(cPtr, $owner);$excode
    183   return ret;
    184 }
    185