PageRenderTime 27ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/d/dmemberfunctionpointers.swg

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