| %define CONVERT_BOOL_IN(lvar,t,invar) | |
| lvar = (t) zend_is_true(&invar); | |
| %enddef | |
| %define CONVERT_INT_IN(lvar,t,invar) | |
| lvar = (t) zval_get_long(&invar); | |
| %enddef | |
| %define CONVERT_LONG_LONG_IN(lvar,t,invar) | |
| switch (Z_TYPE(invar)) { | |
| case IS_DOUBLE: | |
| lvar = (t) Z_DVAL(invar); | |
| break; | |
| case IS_STRING: { | |
| char * endptr; | |
| errno = 0; | |
| lvar = (t) strtoll(Z_STRVAL(invar), &endptr, 10); | |
| if (*endptr == '\0' && !errno) break; | |
| } | |
| /* FALL THRU */ | |
| default: | |
| lvar = (t) zval_get_long(&invar); | |
| } | |
| %enddef | |
| %define CONVERT_UNSIGNED_LONG_LONG_IN(lvar,t,invar) | |
| switch (Z_TYPE(invar)) { | |
| case IS_DOUBLE: | |
| lvar = (t) Z_DVAL(invar); | |
| break; | |
| case IS_STRING: { | |
| char * endptr; | |
| errno = 0; | |
| lvar = (t) strtoull(Z_STRVAL(invar), &endptr, 10); | |
| if (*endptr == '\0' && !errno) break; | |
| } | |
| /* FALL THRU */ | |
| default: | |
| lvar = (t) zval_get_long(&invar); | |
| } | |
| %enddef | |
| %define CONVERT_INT_OUT(lvar,invar) | |
| lvar = (t) zval_get_long(&invar); | |
| %enddef | |
| %define CONVERT_FLOAT_IN(lvar,t,invar) | |
| lvar = (t) zval_get_double(&invar); | |
| %enddef | |
| %define CONVERT_CHAR_IN(lvar,t,invar) | |
| convert_to_string(&invar); | |
| lvar = (t) Z_STRVAL(invar)[0]; | |
| %enddef | |
| %define CONVERT_STRING_IN(lvar,t,invar) | |
| if (Z_ISNULL(invar)) { | |
| lvar = (t) 0; | |
| } else { | |
| convert_to_string(&invar); | |
| lvar = (t) Z_STRVAL(invar); | |
| } | |
| %enddef | |
| %define %pass_by_val( TYPE, PHP_TYPE, CONVERT_IN ) | |
| %typemap(in, phptype=PHP_TYPE) TYPE | |
| %{ | |
| CONVERT_IN($1,$1_ltype,$input); | |
| %} | |
| %typemap(in, phptype=PHP_TYPE) const TYPE & ($*1_ltype temp) | |
| %{ | |
| CONVERT_IN(temp,$*1_ltype,$input); | |
| $1 = &temp; | |
| %} | |
| %typemap(directorout) TYPE | |
| %{ | |
| CONVERT_IN($result, $1_ltype, *$input); | |
| %} | |
| %typemap(directorout) const TYPE & | |
| %{ | |
| $*1_ltype swig_val; | |
| CONVERT_IN(swig_val, $*1_ltype, *$input); | |
| $1_ltype temp = new $*1_ltype(swig_val); | |
| swig_acquire_ownership(temp); | |
| $result = temp; | |
| %} | |
| %typemap(directorfree) const TYPE & | |
| %{ | |
| if (director) { | |
| director->swig_release_ownership(%as_voidptr($input)); | |
| } | |
| %} | |
| %enddef | |
| #define SWIG_AppendOutput(result, obj) SWIG_Php_AppendOutput(result, obj, $isvoid) | |
| /* Deprecated (since 4.3.0) backwards compatibility macro */ | |
| #define t_output_helper SWIG_AppendOutput | |
| /* Deprecated fragment */ | |
| %fragment("t_output_helper","header") {} |