1/* ----------------------------------------------------------------------------- 2 * dmemberfunctionpointers.swg 3 * 4 * Typemaps for member function pointers. 5 * ----------------------------------------------------------------------------- */ 6 7 8%typemap(ctype) SWIGTYPE (CLASS::*) "char *" 9%typemap(imtype) SWIGTYPE (CLASS::*) "char*" 10%typemap(dtype) SWIGTYPE (CLASS::*) "$dclassname" 11 12%typecheck(SWIG_TYPECHECK_POINTER) 13 SWIGTYPE (CLASS::*) 14 "" 15 16 17/* 18 * Conversion generation typemaps. 19 */ 20 21%typemap(in, fragment="SWIG_UnPackData") SWIGTYPE (CLASS::*) %{ 22 SWIG_UnpackData($input, (void *)&$1, sizeof($1)); 23%} 24%typemap(out, fragment="SWIG_PackData") SWIGTYPE (CLASS::*) %{ 25 char buf[128]; 26 char *data = SWIG_PackData(buf, (void *)&$1, sizeof($1)); 27 *data = '\0'; 28 $result = SWIG_d_string_callback(buf); 29%} 30 31%typemap(directorin) SWIGTYPE (CLASS::*) "$input = (void *) $1;" 32%typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE (CLASS::*) 33 "$result = ($1_ltype)$input;" 34 35%typemap(ddirectorin) SWIGTYPE (CLASS::*) 36 "($winput is null) ? null : new $dclassname($winput, false)" 37%typemap(ddirectorout) SWIGTYPE (CLASS::*) "$dclassname.swigGetCPtr($dcall)" 38 39%typemap(din) SWIGTYPE (CLASS::*) "$dclassname.swigGetCMemberPtr($dinput)" 40%typemap(dout, excode=SWIGEXCODE) SWIGTYPE (CLASS::*) { 41 char* cMemberPtr = $imcall; 42 $dclassname ret = (cMemberPtr is null) ? null : new $dclassname(cMemberPtr, $owner);$excode 43 return ret; 44} 45 46 47/* 48 * Helper functions to pack/unpack arbitrary binary data (member function 49 * pointers in this case) into a string. 50 */ 51 52%fragment("SWIG_PackData", "header") { 53/* Pack binary data into a string */ 54SWIGINTERN char * SWIG_PackData(char *c, void *ptr, size_t sz) { 55 static const char hex[17] = "0123456789abcdef"; 56 register const unsigned char *u = (unsigned char *) ptr; 57 register const unsigned char *eu = u + sz; 58 for (; u != eu; ++u) { 59 register unsigned char uu = *u; 60 *(c++) = hex[(uu & 0xf0) >> 4]; 61 *(c++) = hex[uu & 0xf]; 62 } 63 return c; 64} 65} 66 67%fragment("SWIG_UnPackData", "header") { 68/* Unpack binary data from a string */ 69SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { 70 register unsigned char *u = (unsigned char *) ptr; 71 register const unsigned char *eu = u + sz; 72 for (; u != eu; ++u) { 73 register char d = *(c++); 74 register unsigned char uu; 75 if ((d >= '0') && (d <= '9')) 76 uu = ((d - '0') << 4); 77 else if ((d >= 'a') && (d <= 'f')) 78 uu = ((d - ('a'-10)) << 4); 79 else 80 return (char *) 0; 81 d = *(c++); 82 if ((d >= '0') && (d <= '9')) 83 uu |= (d - '0'); 84 else if ((d >= 'a') && (d <= 'f')) 85 uu |= (d - ('a'-10)); 86 else 87 return (char *) 0; 88 *u = uu; 89 } 90 return c; 91} 92} 93