diff options
Diffstat (limited to 'Examples/test-suite/multivalue.i')
| -rw-r--r-- | Examples/test-suite/multivalue.i | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Examples/test-suite/multivalue.i b/Examples/test-suite/multivalue.i new file mode 100644 index 0000000..59f3d76 --- /dev/null +++ b/Examples/test-suite/multivalue.i @@ -0,0 +1,52 @@ +/* -*- c -*- */ + +%module multivalue + +#ifdef SWIGGUILE + +/* Multiple values as lists. By default, if more than one value is to +be returned, a list of the values is created and returned; to switch +back to this behavior, use: */ +%values_as_list; + +void divide_l(int a, int b, int *OUTPUT, int *OUTPUT); + +/* Multiple values as vectors. By issueing: */ +%values_as_vector; +/* vectors instead of lists will be used. */ + +void divide_v(int a, int b, int *OUTPUT, int *OUTPUT); + +/* Multiple values for multiple-value continuations. + (This is the most elegant way.) By issueing: */ +%multiple_values; +/* multiple values are passed to the multiple-value + continuation, as created by `call-with-values' or the + convenience macro `receive'. (See the Scheme file.) */ + +void divide_mv(int a, int b, int *OUTPUT, int *OUTPUT); + +#endif + +%{ + +void divide_l(int a, int b, int *quotient_p, int *remainder_p) +{ + *quotient_p = a/b; + *remainder_p = a%b; +} + +void divide_v(int a, int b, int *quotient_p, int *remainder_p) +{ + *quotient_p = a/b; + *remainder_p = a%b; +} + +void divide_mv(int a, int b, int *quotient_p, int *remainder_p) +{ + *quotient_p = a/b; + *remainder_p = a%b; +} + +%} + |
