PageRenderTime 54ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/php/utils.i

#
Swig | 114 lines | 100 code | 11 blank | 3 comment | 0 complexity | bb63963ace488440e0d7d1c4c70766a9 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. %define CONVERT_BOOL_IN(lvar,t,invar)
  2. convert_to_boolean_ex(invar);
  3. lvar = (t) Z_LVAL_PP(invar);
  4. %enddef
  5. %define CONVERT_INT_IN(lvar,t,invar)
  6. convert_to_long_ex(invar);
  7. lvar = (t) Z_LVAL_PP(invar);
  8. %enddef
  9. %define CONVERT_LONG_LONG_IN(lvar,t,invar)
  10. switch ((*(invar))->type) {
  11. case IS_DOUBLE:
  12. lvar = (t) (*(invar))->value.dval;
  13. break;
  14. case IS_STRING: {
  15. char * endptr;
  16. errno = 0;
  17. lvar = (t) strtoll((*(invar))->value.str.val, &endptr, 10);
  18. if (*endptr && !errno) break;
  19. /* FALL THRU */
  20. }
  21. default:
  22. convert_to_long_ex(invar);
  23. lvar = (t) (*(invar))->value.lval;
  24. }
  25. %enddef
  26. %define CONVERT_UNSIGNED_LONG_LONG_IN(lvar,t,invar)
  27. switch ((*(invar))->type) {
  28. case IS_DOUBLE:
  29. lvar = (t) (*(invar))->value.dval;
  30. break;
  31. case IS_STRING: {
  32. char * endptr;
  33. errno = 0;
  34. lvar = (t) strtoull((*(invar))->value.str.val, &endptr, 10);
  35. if (*endptr && !errno) break;
  36. /* FALL THRU */
  37. }
  38. default:
  39. convert_to_long_ex(invar);
  40. lvar = (t) (*(invar))->value.lval;
  41. }
  42. %enddef
  43. %define CONVERT_INT_OUT(lvar,invar)
  44. lvar = (t) Z_LVAL_PP(invar);
  45. %enddef
  46. %define CONVERT_FLOAT_IN(lvar,t,invar)
  47. convert_to_double_ex(invar);
  48. lvar = (t) Z_DVAL_PP(invar);
  49. %enddef
  50. %define CONVERT_CHAR_IN(lvar,t,invar)
  51. convert_to_string_ex(invar);
  52. lvar = (t) *Z_STRVAL_PP(invar);
  53. %enddef
  54. %define CONVERT_STRING_IN(lvar,t,invar)
  55. if ((*invar)->type==IS_NULL) {
  56. lvar = (t) 0;
  57. } else {
  58. convert_to_string_ex(invar);
  59. lvar = (t) Z_STRVAL_PP(invar);
  60. }
  61. %enddef
  62. %define %pass_by_val( TYPE, CONVERT_IN )
  63. %typemap(in) TYPE
  64. %{
  65. CONVERT_IN($1,$1_ltype,$input);
  66. %}
  67. %typemap(in) const TYPE & ($*1_ltype temp)
  68. %{
  69. CONVERT_IN(temp,$*1_ltype,$input);
  70. $1 = &temp;
  71. %}
  72. %typemap(directorout) TYPE
  73. %{
  74. CONVERT_IN($result,$1_ltype,$input);
  75. %}
  76. %typemap(directorout) const TYPE & ($*1_ltype temp)
  77. %{
  78. CONVERT_IN(temp,$*1_ltype,$input);
  79. $result = &temp;
  80. %}
  81. %enddef
  82. %fragment("t_output_helper","header") %{
  83. static void
  84. t_output_helper( zval **target, zval *o) {
  85. if ( (*target)->type == IS_ARRAY ) {
  86. /* it's already an array, just append */
  87. add_next_index_zval( *target, o );
  88. return;
  89. }
  90. if ( (*target)->type == IS_NULL ) {
  91. REPLACE_ZVAL_VALUE(target,o,1);
  92. FREE_ZVAL(o);
  93. return;
  94. }
  95. zval *tmp;
  96. ALLOC_INIT_ZVAL(tmp);
  97. *tmp = **target;
  98. zval_copy_ctor(tmp);
  99. array_init(*target);
  100. add_next_index_zval( *target, tmp);
  101. add_next_index_zval( *target, o);
  102. }
  103. %}