11
11
// ever need to write a typemap.
14
%typemap(in) double *INPUT(double temp)
16
temp = (double) Z_DVAL_PP($input);
20
%typemap(in) float *INPUT(float temp)
22
temp = (float) Z_DVAL_PP($input);
26
%typemap(in) int *INPUT(int temp)
28
temp = (int) Z_LVAL_PP($input);
32
%typemap(in) short *INPUT(short temp)
34
temp = (short) Z_LVAL_PP($input);
38
%typemap(in) long *INPUT(long temp)
40
temp = (long) Z_LVAL_PP($input);
44
%typemap(in) unsigned int *INPUT(unsigned int temp)
46
temp = (unsigned int) Z_LVAL_PP($input);
50
%typemap(in) unsigned short *INPUT(unsigned short temp)
52
temp = (unsigned short) Z_LVAL_PP($input);
56
%typemap(in) unsigned long *INPUT(unsigned long temp)
58
temp = (unsigned long) Z_LVAL_PP($input);
62
%typemap(in) unsigned char *INPUT(unsigned char temp)
64
temp = (unsigned char) Z_LVAL_PP($input);
68
%typemap(in,numinputs=0) int *OUTPUT(int temp),
69
short *OUTPUT(short temp),
70
long *OUTPUT(long temp),
71
unsigned int *OUTPUT(unsigned int temp),
72
unsigned short *OUTPUT(unsigned short temp),
73
unsigned long *OUTPUT(unsigned long temp),
74
unsigned char *OUTPUT(unsigned char temp),
75
float *OUTPUT(float temp),
76
double *OUTPUT(double temp)
81
%typemap(argout) int *OUTPUT,
85
unsigned short *OUTPUT,
86
unsigned long *OUTPUT,
90
ZVAL_LONG($result,*($input));
93
%typemap(argout) float *OUTPUT,
96
ZVAL_DOUBLE($result,*($input));
15
// Define macros to define the following typemaps:
17
// TYPE *INPUT. Argument is passed in as native variable by value.
18
// TYPE *OUTPUT. Argument is returned as an array from the function call.
19
// TYPE *INOUT. Argument is passed in by value, and out as part of returned list
20
// TYPE *REFERENCE. Argument is passed in as native variable with value
21
// semantics. Variable value is changed with result.
23
// int foo(int *REFERENCE);
28
// Even though $a looks like it's passed by value,
29
// it's value can be changed by foo().
31
%define double_typemap(TYPE)
32
%typemap(in) TYPE *INPUT(TYPE temp)
34
convert_to_double_ex($input);
35
temp = (TYPE) Z_DVAL_PP($input);
38
%typemap(argout) TYPE *INPUT "";
39
%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp)
43
%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT
47
ZVAL_DOUBLE(o,temp$argnum);
48
t_output_helper( &$result, o );
50
%typemap(in) TYPE *REFERENCE (TYPE dvalue)
52
convert_to_double_ex($input);
53
dvalue = (TYPE) (*$input)->value.dval;
56
%typemap(argout) TYPE *REFERENCE
58
$1->value.dval = (double)(lvalue$argnum);
63
%define int_typemap(TYPE)
64
%typemap(in) TYPE *INPUT(TYPE temp)
66
convert_to_long_ex($input);
67
temp = (TYPE) Z_LVAL_PP($input);
70
%typemap(argout) TYPE *INPUT "";
71
%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp)
75
%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT
79
ZVAL_LONG(o,temp$argnum);
80
t_output_helper( &$result, o );
82
%typemap(in) TYPE *REFERENCE (TYPE lvalue)
84
convert_to_long_ex($input);
85
lvalue = (TYPE) (*$input)->value.lval;
88
%typemap(argout) TYPE *REFERENCE
91
(*$arg)->value.lval = (long)(lvalue$argnum);
92
(*$arg)->type = IS_LONG;
96
double_typemap(float);
97
double_typemap(double);
102
int_typemap(unsigned int);
103
int_typemap(unsigned short);
104
int_typemap(unsigned long);
105
int_typemap(unsigned char);
107
%typemap(in) float *INOUT = float *INPUT;
108
%typemap(in) double *INOUT = double *INPUT;
99
110
%typemap(in) int *INOUT = int *INPUT;
100
111
%typemap(in) short *INOUT = short *INPUT;
112
124
%typemap(argout) unsigned short *INOUT= unsigned short *OUTPUT;
113
125
%typemap(argout) unsigned long *INOUT = unsigned long *OUTPUT;
114
126
%typemap(argout) unsigned char *INOUT = unsigned char *OUTPUT;
115
%typemap(argout) float *INOUT = float *OUTPUT;
116
%typemap(argout) double *INOUT= double *OUTPUT;
119
// Accept Php references as pointers
121
%typemap(in) double *REFERENCE (double dvalue)
123
if(!ParameterPassedByReference(ht, argvi))
125
zend_error(E_WARNING, "Parameter wasn't passed by reference");
129
dvalue = (double) (*$input)->value.dval;
133
%typemap(in) float *REFERENCE (float dvalue)
135
if(!ParameterPassedByReference(ht, argvi))
137
zend_error(E_WARNING, "Parameter wasn't passed by reference");
141
dvalue = (float) (*$input)->value.dval;
145
%typemap(in) int *REFERENCE (int dvalue)
147
if(!ParameterPassedByReference(ht, argvi))
149
zend_error(E_WARNING, "Parameter wasn't passed by reference");
153
dvalue = (int) (*$input)->value.lval;
157
%typemap(in) short *REFERENCE (short dvalue)
159
if(!ParameterPassedByReference(ht, argvi))
161
zend_error(E_WARNING, "Parameter wasn't passed by reference");
165
dvalue = (short) (*$input)->value.lval;
169
%typemap(in) long *REFERENCE (long dvalue)
171
if(!ParameterPassedByReference(ht, argvi))
173
zend_error(E_WARNING, "Parameter wasn't passed by reference");
177
dvalue = (long) (*$input)->value.lval;
181
%typemap(in) unsigned int *REFERENCE (unsigned int dvalue)
183
if(!ParameterPassedByReference(ht, argvi))
185
zend_error(E_WARNING, "Parameter wasn't passed by reference");
189
dvalue = (unsigned int) (*$input)->value.lval;
193
%typemap(in) unsigned short *REFERENCE (unsigned short dvalue)
195
if(!ParameterPassedByReference(ht, argvi))
197
zend_error(E_WARNING, "Parameter wasn't passed by reference");
201
dvalue = (unsigned short) $input->value.lval;
205
%typemap(in) unsigned long *REFERENCE (unsigned long dvalue)
207
if(!ParameterPassedByReference(ht, argvi))
209
zend_error(E_WARNING, "Parameter wasn't passed by reference");
213
dvalue = (unsigned long) $input->value.lval;
217
%typemap(argout) double *REFERENCE,
220
$1->value.dval = (double)(*$arg);
221
$1->type = IS_DOUBLE;
224
%typemap(argout) int *REFERENCE,
227
unsigned int *REFERENCE,
228
unsigned short *REFERENCE,
229
unsigned long *REFERENCE
232
(*$arg)->value.lval = (long)(*$input);
233
(*$arg)->type = IS_LONG;
128
%typemap(in) char INPUT[ANY] ( char temp[$1_dim0] )
130
convert_to_string_ex($input);
131
char *val = Z_LVAL_PP($input);
132
strncpy(temp,val,$1_dim0);
135
%typemap(in,numinputs=0) char OUTPUT[ANY] ( char temp[$1_dim0] )
139
%typemap(argout) char OUTPUT[ANY]
143
ZVAL_STRINGL(o,temp$argnum,$1_dim0);
144
t_output_helper( &$result, o );
147
%typemap(in,numinputs=0) void **OUTPUT (int force),
148
void *&OUTPUT (int force)
150
/* If they pass NULL by reference, make it into a void*
151
This bit should go in arginit if arginit support init-ing scripting args */
152
if(SWIG_ConvertPtr(*$input, (void **) &$1, $1_descriptor, 0) < 0) {
153
/* So... we didn't get a ref or ptr, but we'll accept NULL by reference */
154
if ((*$input)->type==IS_NULL && PZVAL_IS_REF(*$input)) {
158
ptr=($*1_ltype) calloc(1,sizeof($*1_ltype));
161
/* have to passback arg$arg too */
163
} else { /* wasn't a pre/ref/thing, OR anything like an int thing */
165
SWIG_PHP_Error(E_ERROR, "Type error in argument $arg of $symname.");
170
%typemap(argout) void **OUTPUT,
173
if (force$argnum) { /* pass back arg$argnum through params ($arg) if we can */
174
if(! PZVAL_IS_REF(*$arg)) {
175
SWIG_PHP_Error(E_WARNING, "Parameter $argnum of $symname wasn't passed by reference");
177
SWIG_SetPointerZval(*$arg, (void *) ptr$argnum, $*1_descriptor, 1);