Home | History | Annotate | Download | only in d
      1 /* -----------------------------------------------------------------------------
      2  * dclassgen.swg
      3  *
      4  * Typemaps containing D code used when generating D proxy classes.
      5  * ----------------------------------------------------------------------------- */
      6 
      7 %typemap(dbase)               SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
      8 %typemap(dclassmodifiers)     SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "class"
      9 %typemap(dcode)               SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
     10 %typemap(dimports)            SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
     11 %typemap(dinterfaces)         SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
     12 %typemap(dinterfaces_derived) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
     13 
     14 // See <denums.swg>.
     15 %typemap(dclassmodifiers) enum SWIGTYPE "enum"
     16 %typemap(dcode) enum SWIGTYPE ""
     17 
     18 
     19 /*
     20  * Proxy classes.
     21  */
     22 
     23 %typemap(dconstructor, excode=SWIGEXCODE,directorconnect="\n  swigDirectorConnect();") SWIGTYPE {
     24   this($imcall, true);$excode$directorconnect
     25 }
     26 
     27 %typemap(ddestructor) SWIGTYPE %{
     28 ~this() {
     29   dispose();
     30 }
     31 %}
     32 
     33 // We do not use override attribute for generated dispose() methods to stay
     34 // somewhat compatible to Phobos and older Tango versions where Object.dispose()
     35 // does not exist.
     36 %typemap(ddispose, methodname="dispose", methodmodifiers="public") SWIGTYPE {
     37   synchronized(this) {
     38     if (swigCPtr !is null) {
     39       if (swigCMemOwn) {
     40         swigCMemOwn = false;
     41         $imcall;
     42       }
     43       swigCPtr = null;
     44     }
     45   }
     46 }
     47 
     48 %typemap(ddispose_derived, methodname="dispose", methodmodifiers="public") SWIGTYPE {
     49   synchronized(this) {
     50     if (swigCPtr !is null) {
     51       if (swigCMemOwn) {
     52         swigCMemOwn = false;
     53         $imcall;
     54       }
     55       swigCPtr = null;
     56       super.dispose();
     57     }
     58   }
     59 }
     60 
     61 
     62 // Unfortunately, the package visibility attribute does not work in D when the
     63 // module in question is in the root package (happens if no -package is specified
     64 // at the SWIG command line), so we are stuck with public visibility for
     65 // swigGetCPtr().
     66 %typemap(dbody) SWIGTYPE %{
     67 private void* swigCPtr;
     68 protected bool swigCMemOwn;
     69 
     70 public this(void* cObject, bool ownCObject) {
     71   swigCPtr = cObject;
     72   swigCMemOwn = ownCObject;
     73 }
     74 
     75 public static void* swigGetCPtr($dclassname obj) {
     76   return (obj is null) ? null : obj.swigCPtr;
     77 }
     78 
     79 mixin $imdmodule.SwigOperatorDefinitions;
     80 %}
     81 
     82 
     83 %typemap(dbody_derived) SWIGTYPE %{
     84 private void* swigCPtr;
     85 
     86 public this(void* cObject, bool ownCObject) {
     87   super($imdmodule.$dclazznameUpcast(cObject), ownCObject);
     88   swigCPtr = cObject;
     89 }
     90 
     91 public static void* swigGetCPtr($dclassname obj) {
     92   return (obj is null) ? null : obj.swigCPtr;
     93 }
     94 
     95 mixin $imdmodule.SwigOperatorDefinitions;
     96 %}
     97 
     98 
     99 /*
    100  * Type wrapper classes.
    101  */
    102 
    103 %typemap(dbody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{
    104 private void* swigCPtr;
    105 
    106 public this(void* cObject, bool futureUse) {
    107   swigCPtr = cObject;
    108 }
    109 
    110 protected this() {
    111   swigCPtr = null;
    112 }
    113 
    114 public static void* swigGetCPtr($dclassname obj) {
    115   return (obj is null) ? null : obj.swigCPtr;
    116 }
    117 
    118 mixin $imdmodule.SwigOperatorDefinitions;
    119 %}
    120 
    121 
    122 /*
    123  * Member function pointer wrapper classes (see <dmemberfunctionpointers.swg>).
    124  */
    125 
    126 %typemap(dbody) SWIGTYPE (CLASS::*) %{
    127 private char* swigCPtr;
    128 
    129 public this(char* cMemberPtr, bool futureUse) {
    130   swigCPtr = cMemberPtr;
    131 }
    132 
    133 protected this() {
    134   swigCPtr = null;
    135 }
    136 
    137 package static char* swigGetCMemberPtr($dclassname obj) {
    138   return (obj is null) ? null : obj.swigCPtr;
    139 }
    140 
    141 mixin $imdmodule.SwigOperatorDefinitions;
    142 %}
    143